diff --git a/fe/README.md b/fe/README.md index 3209eed..c274aac 100644 --- a/fe/README.md +++ b/fe/README.md @@ -7,82 +7,54 @@ - 훅/컴포넌트 내부에서 사용: useRoomStore() - React 외부의 비동기 작업, 이벤트 핸들러: useRoomStore.getState() -### 게임 시작했을 때 Timer와 Lyric이 등장하는 타이밍이 맞지 않음 - -- startGame을 이미 했는데 Intro 화면을 2초 보여줘서 그런 건가 싶음 -- 게임 시작 버튼 클릭했을 때 Intro 화면을 GameScreen에서 먼저 2초 띄우고, startGame을 하도록 하면 되려나? -- 원인: Lyric 애니메이션 duration이 timeLimit으로 설정해서, 가사 길이가 짧으면 늦게 등장하게 됐던 것이었다. - - 가사의 길이를 동일하게 맞추지 않는 이상 등장하는 시간을 제한 시간과 완벽하게 맞출 수는 없을 것 같다. -- 해결: Lyric 애니메이션 delay 시간을 -0.5로 설정해서 길이가 짧은 가사는 게임 스크린 중앙쯤부터 등장하도록 했다. - - 적어도 '가사가 왜 안 나오지?' 생각은 안 들 것 같다..! - -### 게임 진행 UI 구현 문제: 실시간은 너무 어려워 - -- startGame을 하면 turnChanged로 다음 차례 사용자 데이터(turnData)를 받는다. -- startRecording을 하면 해당 차례 사용자의 음성 데이터를 전달하고 채점 결과(result)를 받는다. -- 그런데 startGame을 하면 이 turnData가 계속 들어온다. -- 이게 문제가 뭐냐면, 음성 데이터 전달 -> 채점 -> 결과 -> 다음 턴 이런 순서로 되어야 하는데, 결과를 받기도 전에 다음 turnData가 들어와서 결과를 보여줄 수 없어진다. (제발 아직 오지 마.. 제발) -- 난 이게 내 역량 부족이라고 생각해 금, 토 꼬박 12시간을 바쳐서 해결해 보려고 했다. setTimeout 떡칠을 하고, 정말 별짓을 다 했는데 안 됐다. 뭐라고 표현하면 좋을까. 쓰나미를 구멍 난 우산으로 막겠다고 까불다가 집도 절도 잃어버린 물에 빠진 생쥐 꼴이 된 거 같다고 해야 하나. 몸도 마음도 너덜너덜해졌다. -- 내가 하도 찡찡대서 백엔드 쪽에서 이벤트를 하나 더 만들어 주셨다. 주말에 죄송함니다 진성님. 그리고 저를 살려주셔서 감사합니다,, -- 이제 클라이언트에서 result를 받은 후 next 이벤트를 보내야 다음 turnData를 받게 된다. 이제 돼야 한다. 되겠지..? -- next 이벤트 쓰고 바로 잘 되는 줄 알았는데 채점 중에서 결과로 안 넘어가질 때가 있다. (안 될 때가 더 많다) - - 잘 됐다가 안 됐다가 하는 게 너무 화가 난다,, 초반에 낚여서 PR 날릴 뻔 했네,, 진짜 사람 미치게 만드는구만 - - 발음 게임 채점이 제대로 안 됐던 거였다..! 휴우 내 잘못 아니라서 다행이다(?) - -### 게임 종료됐는데, startRecording이 계속된다? - -```tsx -// 턴 데이터 변경 시 게임 초기화 -useEffect(() => { - if (!turnData && !resultData) return; -// 순위 데이터가 있으면 종료시켜야 했는데..! - if (rank.length > 0) return; - - ... -}, [turnData, currentRoom, currentPlayer]); -``` - -### react-router-dom 경고 - -정체: React Router v7에서 상대 경로의 해석 방식이 변경될 예정이고, 이를 사전에 알려주는 경고 메시지 - -``` -react-router-dom.js?v=ceca9ee8:4374 ⚠️ React Router Future Flag Warning: Relative route resolution within Splat routes is changing in v7. You can use the v7_relativeSplatPath future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath. -``` - -``` -react-router-dom.js?v=ceca9ee8:4374 ⚠️ React Router Future Flag Warning: React Router will begin wrapping state updates in React.startTransition in v7. You can use the v7_startTransition future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_starttransition. -``` - -최신 버전으로 업데이트하니까 경고 사라졌음 - -```bash -npm install react@latest react-dom@latest -``` - -업데이트하고 나서 라우팅 문제 생겨서 다운그레이드함.. 방 나가기 시 나가기 처리가 제대로 안 됨 -어떻게 해야 하는지 모르겠다ㅜㅜ - -### VolumeBar 스피커 버튼을 토글하여 볼륨 0 ↔ 50으로 조절할 수 있도록 함 - -- 진성님이 피드백 주신 부분 반영 - -### 키보드 Enter로도 동작하도록 함 - -- Dialog에서 항상 마우스로 Input 필드를 눌러 입력하고, 확인 버튼을 클릭해야만 하는 게 불편했다. -- 그래서 다음과 같은 것들이 가능하도록 했다. - - Dialog Open 시 첫 Input 필드에 포커싱 - - Input 필드가 여러 개인 경우 Enter로 다음 Input 필드 이동 - - Enter로 Submit(확인 버튼 클릭과 동일한 동작) -- shadcn/ui Dialog 컴포넌트는 ESC 키를 눌렀을 때 Dialog Close를 해줘서 이건 따로 처리가 필요 없었다. -- SearchBar(방 검색)에도 적용할 생각! - -### 게임 진행 테스트 도중 버그 발견 - -- 본인 마이크 버튼을 음소거하면 setMute 이벤트를 보내고 updateUsers를 수신해 players 상태를 변경한다. -- 게임 진행 중에 이 마이크 버튼을 음소거하면 각 player의 isMuted 상태가 바뀌고, 이는 currentRoom의 상태를 바꿔 리렌더링 되면서 voice recording이 되지 않는다. (게임방을 나갔을 경우에도 동일, 이 부분은 나중에 해결하기로) - - PlayScreen의 useEffect 의존성 배열에 currentRoom이 있어서 그런 것 같다. -- 그래서 일단 각 player에서 isMuted를 없애고, setMute 시 updateUsers가 아닌 muteStatusChanged 이벤트를 수신해 muteStatus: {닉네임: false/true, ...} 데이터를 받아온다. -- Player 컴포넌트 내부에 isMuted 초기 상태를 정해주고, muteStatus 데이터 상태가 변경되었을 때 isMuted를 변경해 주는 방식으로 바꿨다. -- 이렇게 해서 Player 컴포넌트와 GameScreen 컴포넌트를 독립적으로 리렌더링 해줄 수 있게 됐다. -- 문제: muteStatus의 initial state를 null로 설정하니까 처음에 가져올 때 에러 발생해서 빈 객체로 초기화 +### 채점 중에서 게임 페이즈가 넘어가지 않는 문제 + +- 음소거 버튼 문제처럼 userUpdates로 상태가 변경되면 채점 중에서 넘어가지 않는다. +- 턴이 바뀌고 해당 차례의 사용자의 음성 정보를 넘겨줄 때 roomId가 필요한데 currentRoom의 roomId를 전달하고 있어서, updateUsers로 currentRoom이 변경되면 이 문제가 일어날 수 있다. +- 그래서 currentRoom에서 가져오지 않고, useParams로 가져와서 전달해 주니까 채점 중에서 넘어가지 않는 문제는 없어진 것 같다. (아직 모름..) +- 그런데 이렇게 처리하니까 게임 중일 때 또 다른 문제가 생겼다. + - 자기 차례일 때 새로고침 시: 재입장 처리 돼서 순위에 2번 반영되고, 게임 준비 & 시작하면 이전 게임의 결과가 나와 버린다. (result가 초기화 되지 않음) + - 다른 사람 차례일 때 새로고침 시: 순위에 2번 반영되지는 않지만, 역시나 게임 준비 & 시작하면 이전 게임의 결과가 나온다. (result가 초기화 되지 않음) + - 새로고침 해서 준비 화면에 있는 상태에서 새로고침을 한 번 더 하면 정상 동작한다. +- 새로고침 할 때 방 나가기 처리를 해야할 것 같은데.. 잘 모르겠다.. ㅜ 일단 채점 중에서 멈춰있지는 않는 것 같다. + +### ExitDialog 새로고침 후 뒤로가기 하면 취소 버튼에 포커싱 + +- KickDialog도 똑같이 shadcn/ui AlertDialog 컴포넌트를 쓰고 있는데, 강퇴 시에는 아무리 새로고침을 해도 취소 버튼에 포커싱되면서 아웃라인이 생기지 않음 +- 왜 방 나가기 Dialog만, 그것도 새로고침을 하고 나면 그러는 거지? +- 나가기 버튼으로 나갈 때는 문제 없고 새로고침 후 뒤로가기 하면 그러는 것 같다. 뒤로가기 이벤트가 뭔가 영향을 주는 건가? 아무튼 AlertDialog 컴포넌트 자체에 처리 + + ```jsx + + ``` + +### 새로고침 지옥에서 꺼내줘 + +- 개발 시작 단계부터 날 괴롭게 했던 새로고침.. 재입장 처리로 어떻게 넘어갔었는데, 게임 중일 때는 막아야 함 +- 키보드 동작은 막을 수 있는데 브라우저 새로고침 버튼 클릭은 막을 수 없음. Alert 띄우는 게 최선인데 이 Alert도 메시지 수정 불가. +- 채점 중에서 안 넘어가는 문제가 해결되지 않았다. + - 계속 테스트해 보는데 음성 데이터 전달 중에 새로고침 하면 채점이 안 되고 결과를 못 받아와서 그런 것 같다. +- `beforeunload` 이벤트의 브라우저 기본 alert보다 먼저 혹은 동시에 CustomAlertDialog을 띄우는 것은 불가능함 + - 강퇴처럼 방 목록 페이지에 왔을 때 알림을 띄우기로 함 + - 이게 왜 잘 안되는 건지 모르겠다.. 강퇴랑 별다를 게 없는 거 같은데..🤯 나중에 고쳐보는 걸로 + - 페이지가 새로고침되면서 상태가 초기화되기 때문에 알림이 표시되지 않음. 강퇴 알림처럼 sessionStorage에 저장하고 가져와야 함 + +### 화요일 데일리스크럼 이슈 공유: 대기 중인 방에 링크로 입장 시 닉네임 설정 전에 마이크 권한 요청 및 오디오 연결되는 문제 + +- 방 목록 페이지에서 게임 방 클릭 시에는 제대로 동작하는데, 링크 입장 시에는 음성이 먼저 연결된다는 이슈를 전달받음 +- 원인 + - 링크 입장 시 GamePage index.tsx의 useReconnect로 소켓 연결, 닉네임 설정, 유효성 검증, 각 서버에 join된다. (방 목록 페이지에서의 입장은 handleJoin) + - 방 목록 페이지에서 게임 방 클릭 시에는 잘 동작한다는 말이 힌트가 되어줬다. + - useReconnect에서 순서가 JoinDialog의 handleJoin의 순서와 달랐기 때문이다. 유효성 검증이 추가되고 gameSocket의 joinRoom도 비동기 함수로 바꾸고 했는데 useReconnect 훅에서 순서를 바꿔준다는 걸 잊어버렸다. +- 해결 + - useReconnect에서 각 함수 호출 순서를 handleJoin과 동일하게 맞춰서 해결..! + - gameSocket.joinRoom에서 유효성 검증에 대한 에러를 발생시키고 있기 때문에 순서를 잘 생각해야 한다. 게임 중 새로고침, 게임 중인 방 링크 입장할 때는 입장 불가 알림 처리도 해야 했기 때문에 머리가 터져버리는 줄 알았다. 오죽했으면 손으로 써가면서 체크함,,😇 diff --git a/fe/index.html b/fe/index.html index d142cfc..0b9e79e 100644 --- a/fe/index.html +++ b/fe/index.html @@ -2,7 +2,13 @@ - + + Clovapatra diff --git a/fe/public/vite.svg b/fe/public/vite.svg deleted file mode 100644 index e7b8dfb..0000000 --- a/fe/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/fe/src/App.tsx b/fe/src/App.tsx index 8dd1235..facc768 100644 --- a/fe/src/App.tsx +++ b/fe/src/App.tsx @@ -5,6 +5,7 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import RoomListPage from './pages/RoomListPage'; import { ToastContainer } from 'react-toastify'; import 'react-toastify/dist/ReactToastify.css'; +import LandingPage from './pages/LandingPage'; const queryClient = new QueryClient(); @@ -14,7 +15,8 @@ function App() {
- } /> + } /> + } /> } /> diff --git a/fe/src/assets/images/angry-pepe.png b/fe/src/assets/images/angry-pepe.png deleted file mode 100644 index cd0843e..0000000 Binary files a/fe/src/assets/images/angry-pepe.png and /dev/null differ diff --git a/fe/src/assets/lottie/404.json b/fe/src/assets/lottie/404.json deleted file mode 100644 index f97a69a..0000000 --- a/fe/src/assets/lottie/404.json +++ /dev/null @@ -1 +0,0 @@ -{"v":"4.8.0","meta":{"g":"LottieFiles AE ","a":"","k":"","d":"","tc":""},"fr":24,"ip":0,"op":120,"w":1080,"h":1080,"nm":"T-rex","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"CAM","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[540,540,0],"to":[-426.667,0,0],"ti":[504.167,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":120,"s":[-2020,540,0],"to":[-504.167,0,0],"ti":[77.5,0,0]},{"t":121,"s":[-2485,540,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"PAGE NOT FOUND Outlines","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1343.255,326.937,0],"ix":2},"a":{"a":0,"k":[568.553,44.791,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[12.773,-31.932],[-12.772,-31.932],[-12.772,31.931],[12.773,31.931]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-38.318,44.704],[-38.318,-44.704],[25.546,-44.704],[25.546,-31.932],[38.318,-31.932],[38.318,31.932],[25.546,31.932],[25.546,44.704]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1098.675,44.954],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-25.545,6.387],[-25.545,44.704],[-38.317,44.704],[-38.317,-44.704],[-12.773,-44.704],[-12.773,-19.159],[0,-19.159],[0,6.387],[12.772,6.387],[12.772,-44.704],[38.317,-44.704],[38.317,44.704],[12.772,44.704],[12.772,31.932],[-12.773,31.932],[-12.773,6.387]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1009.268,44.953],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[12.773,-44.704],[38.318,-44.704],[38.318,44.704],[-25.545,44.704],[-25.545,31.932],[-38.318,31.932],[-38.318,-44.704],[-12.773,-44.704],[-12.773,31.932],[12.773,31.932]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[919.862,44.954],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[12.773,-31.932],[-12.772,-31.932],[-12.772,31.931],[12.773,31.931]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-25.545,31.932],[-38.317,31.932],[-38.317,-31.932],[-25.545,-31.932],[-25.545,-44.704],[25.545,-44.704],[25.545,-31.932],[38.317,-31.932],[38.317,31.932],[25.545,31.932],[25.545,44.704],[-25.545,44.704]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[830.456,44.954],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[31.931,-44.704],[31.931,-31.932],[-6.386,-31.932],[-6.386,-6.387],[31.931,-6.387],[31.931,6.387],[-6.386,6.387],[-6.386,44.704],[-31.931,44.704],[-31.931,-44.704]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[747.435,44.954],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[38.318,-44.704],[38.318,-31.932],[12.772,-31.932],[12.772,44.704],[-12.773,44.704],[-12.773,-31.932],[-38.318,-31.932],[-38.318,-44.704]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[613.325,44.954],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[12.772,-31.932],[-12.773,-31.932],[-12.773,31.931],[12.772,31.931]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-25.545,31.932],[-38.317,31.932],[-38.317,-31.932],[-25.545,-31.932],[-25.545,-44.704],[25.545,-44.704],[25.545,-31.932],[38.317,-31.932],[38.317,31.932],[25.545,31.932],[25.545,44.704],[-25.545,44.704]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[523.918,44.954],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":4,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-25.545,6.387],[-25.545,44.704],[-38.317,44.704],[-38.317,-44.704],[-12.773,-44.704],[-12.773,-19.159],[0,-19.159],[0,6.387],[12.772,6.387],[12.772,-44.704],[38.317,-44.704],[38.317,44.704],[12.772,44.704],[12.772,31.932],[-12.773,31.932],[-12.773,6.387]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[434.512,44.953],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-31.931,44.704],[-31.931,-44.704],[31.931,-44.704],[31.931,-31.932],[-6.386,-31.932],[-6.386,-6.387],[31.931,-6.387],[31.931,6.387],[-6.386,6.387],[-6.386,31.932],[31.931,31.932],[31.931,44.704]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[300.402,44.954],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[12.773,33.527],[12.773,44.704],[-25.544,44.704],[-25.544,31.931],[-38.318,31.931],[-38.318,-31.932],[-25.544,-31.932],[-25.544,-44.704],[38.318,-44.704],[38.318,-19.16],[25.545,-19.16],[25.545,-31.932],[-12.772,-31.932],[-12.772,31.931],[11.176,31.931],[12.773,30.335],[12.773,6.385],[0,6.385],[0,-6.387],[38.318,-6.387],[38.318,44.704],[25.545,44.704],[25.545,31.931],[14.37,31.931]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[217.381,44.954],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":2,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[12.772,-31.932],[-12.773,-31.932],[-12.773,6.386],[12.772,6.386]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0]],"o":[[0,0]],"v":[[12.772,6.387]],"c":false},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-12.773,19.159],[-12.773,44.704],[-38.318,44.704],[-38.318,-31.932],[-25.545,-31.932],[-25.545,-44.704],[25.545,-44.704],[25.545,-31.932],[38.318,-31.932],[38.318,44.704],[12.772,44.704],[12.772,19.159]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[127.974,44.954],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":5,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[12.772,-31.932],[-12.773,-31.932],[-12.773,-6.387],[12.772,-6.387]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[25.544,-6.387],[25.544,6.387],[-12.773,6.387],[-12.773,44.704],[-38.318,44.704],[-38.318,-44.704],[25.544,-44.704],[25.544,-31.932],[38.318,-31.932],[38.318,-6.387]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[38.568,44.954],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":4,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Cactus Outlines 2","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[2629.875,107.785,0],"ix":2},"a":{"a":0,"k":[31.067,68.802,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-9.302,68.552],[-9.302,21.902],[-21.444,21.902],[-21.444,18.014],[-26.13,18.014],[-26.13,13.913],[-30.817,13.913],[-30.817,-31.087],[-26.823,-31.087],[-26.823,-35.719],[-23.255,-35.719],[-23.255,-31.247],[-19.26,-31.247],[-19.26,9.281],[-17.344,9.281],[-17.344,11.304],[-9.302,11.304],[-9.302,-64.158],[-4.962,-64.158],[-4.962,-68.552],[5.689,-68.552],[5.689,-64.078],[10.722,-64.078],[10.722,-7.282],[20.307,-7.282],[20.307,-47.329],[23.574,-47.329],[23.574,-52.3],[27.124,-52.3],[27.124,-47.613],[30.817,-47.613],[30.817,-4.371],[27.124,-4.371],[27.124,1.381],[22.296,1.381],[22.296,6.138],[9.799,6.138],[9.799,68.552]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[31.067,68.802],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Cactus Outlines","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[70.361,107.785,0],"ix":2},"a":{"a":0,"k":[31.067,68.802,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-9.302,68.552],[-9.302,21.902],[-21.444,21.902],[-21.444,18.014],[-26.13,18.014],[-26.13,13.913],[-30.817,13.913],[-30.817,-31.087],[-26.823,-31.087],[-26.823,-35.719],[-23.255,-35.719],[-23.255,-31.247],[-19.26,-31.247],[-19.26,9.281],[-17.344,9.281],[-17.344,11.304],[-9.302,11.304],[-9.302,-64.158],[-4.962,-64.158],[-4.962,-68.552],[5.689,-68.552],[5.689,-64.078],[10.722,-64.078],[10.722,-7.282],[20.307,-7.282],[20.307,-47.329],[23.574,-47.329],[23.574,-52.3],[27.124,-52.3],[27.124,-47.613],[30.817,-47.613],[30.817,-4.371],[27.124,-4.371],[27.124,1.381],[22.296,1.381],[22.296,6.138],[9.799,6.138],[9.799,68.552]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[31.067,68.802],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"4 Outlines","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1889.785,98.443,0],"ix":2},"a":{"a":0,"k":[86.792,101.499,0],"ix":1},"s":{"a":0,"k":[80,80,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[57.827,43.369],[57.827,101.196],[0,101.196],[0,43.369],[-86.74,43.369],[-86.74,-101.196],[-57.826,-101.196],[-57.826,14.456],[0,14.456],[0,-101.196],[57.827,-101.196],[57.827,14.456],[86.74,14.456],[86.74,43.369]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[86.989,101.447],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"0 Outlines","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1317.513,98.443,0],"ix":2},"a":{"a":0,"k":[86.792,101.499,0],"ix":1},"s":{"a":0,"k":[80,80,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[28.913,-72.283],[-28.913,-72.283],[-28.913,72.284],[28.913,72.284]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-57.827,72.284],[-86.74,72.284],[-86.74,-72.283],[-57.827,-72.283],[-57.827,-101.197],[57.828,-101.197],[57.828,-72.283],[86.74,-72.283],[86.74,72.284],[57.828,72.284],[57.828,101.197],[-57.827,101.197]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[86.99,101.447],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"4 Outlines","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[790.222,98.443,0],"ix":2},"a":{"a":0,"k":[86.792,101.499,0],"ix":1},"s":{"a":0,"k":[80,80,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[57.827,43.369],[57.827,101.196],[0,101.196],[0,43.369],[-86.74,43.369],[-86.74,-101.196],[-57.827,-101.196],[-57.827,14.456],[0,14.456],[0,-101.196],[57.827,-101.196],[57.827,14.456],[86.74,14.456],[86.74,43.369]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[86.989,101.447],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":3,"nm":"JUMP","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":0,"k":85.737,"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.55],"y":[1.002]},"o":{"x":[0.03],"y":[0.112]},"t":14,"s":[650.392]},{"i":{"x":[0.97],"y":[0.885]},"o":{"x":[0.38],"y":[0.001]},"t":22,"s":[413.392]},{"i":{"x":[1],"y":[1]},"o":{"x":[0],"y":[0]},"t":30,"s":[650.392]},{"i":{"x":[0.55],"y":[1.002]},"o":{"x":[0.03],"y":[0.112]},"t":49,"s":[650.392]},{"i":{"x":[0.97],"y":[0.885]},"o":{"x":[0.38],"y":[0.001]},"t":57,"s":[413.392]},{"i":{"x":[1],"y":[1]},"o":{"x":[0.491],"y":[0]},"t":65,"s":[650.392]},{"i":{"x":[0.55],"y":[1.002]},"o":{"x":[0.03],"y":[0.112]},"t":75,"s":[650.392]},{"i":{"x":[0.97],"y":[0.885]},"o":{"x":[0.38],"y":[0.001]},"t":83,"s":[413.392]},{"i":{"x":[1],"y":[1]},"o":{"x":[0.42],"y":[0]},"t":91,"s":[650.392]},{"i":{"x":[0.55],"y":[1.002]},"o":{"x":[0.03],"y":[0.112]},"t":102,"s":[650.392]},{"i":{"x":[0.97],"y":[0.885]},"o":{"x":[0.38],"y":[0.001]},"t":110,"s":[413.392]},{"t":118,"s":[650.392]}],"ix":4}},"a":{"a":0,"k":[60,60,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"T-REX pata 1 Outlines","parent":10,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":0,"k":43.322,"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":0,"s":[63.717]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":3,"s":[80.217]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":9,"s":[80.217]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":12,"s":[63.717]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":15,"s":[80.217]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":21,"s":[80.217]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":24,"s":[63.717]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":27,"s":[80.217]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":33,"s":[80.217]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":36,"s":[63.717]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":39,"s":[80.217]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":45,"s":[80.217]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":48,"s":[63.717]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":51,"s":[80.217]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":57,"s":[80.217]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":60,"s":[63.717]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":63,"s":[80.217]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":69,"s":[80.217]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":72,"s":[63.717]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":75,"s":[80.217]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":81,"s":[80.217]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":84,"s":[63.717]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":87,"s":[80.217]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":93,"s":[80.217]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":96,"s":[63.717]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":99,"s":[80.217]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":105,"s":[80.217]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":108,"s":[63.717]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":111,"s":[80.217]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":117,"s":[80.217]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":120,"s":[63.717]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":123,"s":[80.217]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":129,"s":[80.217]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":132,"s":[63.717]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":135,"s":[80.217]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":141,"s":[80.217]},{"t":144,"s":[63.717]}],"ix":4,"x":"var $bm_rt;\n$bm_rt = loopOut();"}},"a":{"a":0,"k":[8.108,5.076,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[7.066,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-5.822,0],[0,0]],"v":[[-11.858,-11.717],[-11.858,-2.485],[-3.621,-2.485],[-3.621,23.076],[11.858,23.076],[11.858,16.545],[4.474,16.545],[4.474,-18.248],[-4.9,-23.076],[-11.858,-18.248]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[12.108,23.327],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"T-REX pata 2 Outlines","parent":10,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":0,"k":76.678,"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[80.717]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[80.717]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.29],"y":[0]},"t":6,"s":[63.217]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[80.716]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[80.717]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[80.717]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.29],"y":[0]},"t":18,"s":[63.217]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[80.716]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[80.717]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[80.717]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.29],"y":[0]},"t":30,"s":[63.217]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":33,"s":[80.716]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":36,"s":[80.717]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":39,"s":[80.717]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.29],"y":[0]},"t":42,"s":[63.217]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[80.716]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":48,"s":[80.717]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":51,"s":[80.717]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.29],"y":[0]},"t":54,"s":[63.217]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[80.716]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[80.717]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":63,"s":[80.717]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.29],"y":[0]},"t":66,"s":[63.217]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":69,"s":[80.716]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":72,"s":[80.717]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[80.717]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.29],"y":[0]},"t":78,"s":[63.217]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":81,"s":[80.716]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":84,"s":[80.717]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":87,"s":[80.717]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.29],"y":[0]},"t":90,"s":[63.217]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":93,"s":[80.716]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":96,"s":[80.717]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":99,"s":[80.717]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.29],"y":[0]},"t":102,"s":[63.217]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":105,"s":[80.716]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":108,"s":[80.717]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":111,"s":[80.717]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.29],"y":[0]},"t":114,"s":[63.217]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":117,"s":[80.716]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[80.717]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":123,"s":[80.717]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.29],"y":[0]},"t":126,"s":[63.217]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":129,"s":[80.716]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":132,"s":[80.717]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":135,"s":[80.717]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.29],"y":[0]},"t":138,"s":[63.217]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":141,"s":[80.716]},{"t":144,"s":[80.717]}],"ix":4,"x":"var $bm_rt;\n$bm_rt = loopOut();"}},"a":{"a":0,"k":[8.233,5.576,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[7.066,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-5.822,0],[0,0]],"v":[[-11.858,-11.717],[-11.858,-2.485],[-3.622,-2.485],[-3.622,23.076],[11.858,23.076],[11.858,16.545],[4.473,16.545],[4.473,-18.248],[-4.9,-23.076],[-11.858,-18.248]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[12.108,23.327],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"T-REX cola Outlines","parent":14,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":6,"s":[-5.074]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":12,"s":[0]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":18,"s":[-5.074]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":24,"s":[0]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":30,"s":[-5.074]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":36,"s":[0]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":42,"s":[-5.074]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":48,"s":[0]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":54,"s":[-5.074]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":60,"s":[0]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":66,"s":[-5.074]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":72,"s":[0]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":78,"s":[-5.074]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":84,"s":[0]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":90,"s":[-5.074]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":96,"s":[0]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":102,"s":[-5.074]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":108,"s":[0]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":114,"s":[-5.074]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":120,"s":[0]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":126,"s":[-5.074]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":132,"s":[0]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":138,"s":[-5.074]},{"t":144,"s":[0]}],"ix":10,"x":"var $bm_rt;\n$bm_rt = loopOut();"},"p":{"a":0,"k":[9.634,72.477,0],"ix":2},"a":{"a":0,"k":[45.988,59.98,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-24.626],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,26.095],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[15.763,-7.722],[25.988,16.135],[15.763,40.563],[8.662,40.563],[8.662,31.615],[-0.569,31.615],[-0.569,22.242],[-9.657,22.242],[-9.657,15],[-17.61,15],[-17.61,6.763],[-25.988,6.763],[-25.988,-42.23],[-18.604,-42.23],[-18.604,-28.03],[-9.515,-28.03],[-9.515,-14.113],[-2.131,-14.113],[-2.131,-7.669]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[26.238,42.481],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"T-REX_cuerpo Outlines","parent":10,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":0,"k":69.405,"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.717],"y":[1]},"o":{"x":[0.195],"y":[0]},"t":0,"s":[39.283]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":6,"s":[43.537]},{"i":{"x":[0.717],"y":[1]},"o":{"x":[0.195],"y":[0]},"t":12,"s":[39.283]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":18,"s":[43.537]},{"i":{"x":[0.717],"y":[1]},"o":{"x":[0.195],"y":[0]},"t":24,"s":[39.283]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":30,"s":[43.537]},{"i":{"x":[0.717],"y":[1]},"o":{"x":[0.195],"y":[0]},"t":36,"s":[39.283]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":42,"s":[43.537]},{"i":{"x":[0.717],"y":[1]},"o":{"x":[0.195],"y":[0]},"t":48,"s":[39.283]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":54,"s":[43.537]},{"i":{"x":[0.717],"y":[1]},"o":{"x":[0.195],"y":[0]},"t":60,"s":[39.283]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":66,"s":[43.537]},{"i":{"x":[0.717],"y":[1]},"o":{"x":[0.195],"y":[0]},"t":72,"s":[39.283]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":78,"s":[43.537]},{"i":{"x":[0.717],"y":[1]},"o":{"x":[0.195],"y":[0]},"t":84,"s":[39.283]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":90,"s":[43.537]},{"i":{"x":[0.717],"y":[1]},"o":{"x":[0.195],"y":[0]},"t":96,"s":[39.283]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":102,"s":[43.537]},{"i":{"x":[0.717],"y":[1]},"o":{"x":[0.195],"y":[0]},"t":108,"s":[39.283]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":114,"s":[43.537]},{"i":{"x":[0.717],"y":[1]},"o":{"x":[0.195],"y":[0]},"t":120,"s":[39.283]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":126,"s":[43.537]},{"i":{"x":[0.717],"y":[1]},"o":{"x":[0.195],"y":[0]},"t":132,"s":[39.283]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":138,"s":[43.537]},{"t":144,"s":[39.283]}],"ix":4,"x":"var $bm_rt;\n$bm_rt = loopOut();"}},"a":{"a":0,"k":[40.298,46.652,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-10.935,0.425]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[10.935,-0.426]],"v":[[40.048,-38.451],[40.048,18.781],[31.81,18.781],[31.81,31.279],[23.005,31.279],[23.005,40.225],[15.621,40.225],[15.621,46.402],[-40.048,46.402],[-40.048,0.617],[-33.473,0.617],[-33.473,-7.775],[-25.562,-7.775],[-25.562,-17.29],[-13.207,-17.29],[-13.207,-24.533],[0.001,-24.533],[0.001,-32.769],[11.148,-32.769],[28.828,-45.976]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[40.298,46.653],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"T-REX_mano Outlines","parent":14,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":6,"s":[9.3]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":12,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":18,"s":[9.3]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":24,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":30,"s":[9.3]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":36,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":42,"s":[9.3]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":48,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":54,"s":[9.3]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":60,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":66,"s":[9.3]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":72,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":78,"s":[9.3]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":84,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":90,"s":[9.3]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":96,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":102,"s":[9.3]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":108,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":114,"s":[9.3]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":120,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":126,"s":[9.3]},{"i":{"x":[0.71],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":132,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":138,"s":[9.3]},{"t":144,"s":[0]}],"ix":10,"x":"var $bm_rt;\n$bm_rt = loopOut();"},"p":{"a":0,"k":[76.648,33.707,0],"ix":2},"a":{"a":0,"k":[1.488,4.595,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,3.888]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,-3.195]],"v":[[-6.337,-8.095],[10.988,-8.095],[10.988,8.095],[3.32,8.095],[3.32,-0.853],[-6.337,-0.853],[-10.988,-4.155]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[11.238,8.345],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":"T-REX_cabeza Outlines","parent":14,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":6,"s":[4]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":12,"s":[0]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":18,"s":[4]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":24,"s":[0]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":30,"s":[4]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":36,"s":[0]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":42,"s":[4]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":48,"s":[0]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":54,"s":[4]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":60,"s":[0]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":66,"s":[4]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":72,"s":[0]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":78,"s":[4]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":84,"s":[0]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":90,"s":[4]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":96,"s":[0]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":102,"s":[4]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":108,"s":[0]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":114,"s":[4]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":120,"s":[0]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":126,"s":[4]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":132,"s":[0]},{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":138,"s":[4]},{"t":144,"s":[0]}],"ix":10,"x":"var $bm_rt;\n$bm_rt = loopOut();"},"p":{"a":0,"k":[63.684,16.934,0],"ix":2},"a":{"a":0,"k":[15.683,67.492,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[4.527,4.527],[-4.527,4.527],[-4.527,-4.527],[4.527,-4.527]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[20.185,16.208],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[14.485,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[-15.905,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[24.142,24.852],[-9.799,24.852],[-25.279,37.491],[-40.616,24.852],[-40.616,-28.97],[-32.806,-28.97],[-32.806,-37.491],[32.094,-37.491],[32.094,-29.707],[41.184,-29.707],[41.184,6.533],[-0.995,6.533],[-0.995,17.04],[24.066,17.04]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[41.433,37.742],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"Nube Outlines 5","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1425.983,-156.941,0],"ix":2},"a":{"a":0,"k":[91.148,31.556,0],"ix":1},"s":{"a":0,"k":[150,150,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-66.089,22.58],[-62.397,22.58],[-62.397,26.556],[86.148,26.556],[86.148,20.627],[81.71,20.627],[81.71,12.958],[73.722,12.958],[73.722,4.971],[62.538,4.971],[62.538,-3.87],[41.023,-3.87],[41.023,-8.45],[28.029,-8.45],[28.029,-15.16],[23.343,-15.16],[23.343,-21.124],[16.1,-21.124],[16.1,-26.556],[3.426,-26.556],[3.426,-22.509],[-17.024,-22.509],[-17.024,-17.397],[-22.03,-17.397],[-22.03,-13.562],[-30.87,-13.562],[-30.87,-0.781],[-44.397,-0.781],[-44.397,3.16],[-48.87,3.16],[-48.87,7.313],[-76.669,7.313],[-76.669,12.106],[-80.397,12.106],[-80.397,22.012],[-86.148,22.012]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[91.148,31.556],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"Nube Outlines 4","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[996.983,-266.941,0],"ix":2},"a":{"a":0,"k":[91.148,31.556,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-66.089,22.58],[-62.397,22.58],[-62.397,26.556],[86.148,26.556],[86.148,20.627],[81.71,20.627],[81.71,12.958],[73.722,12.958],[73.722,4.971],[62.538,4.971],[62.538,-3.87],[41.023,-3.87],[41.023,-8.45],[28.029,-8.45],[28.029,-15.16],[23.343,-15.16],[23.343,-21.124],[16.1,-21.124],[16.1,-26.556],[3.426,-26.556],[3.426,-22.509],[-17.024,-22.509],[-17.024,-17.397],[-22.03,-17.397],[-22.03,-13.562],[-30.87,-13.562],[-30.87,-0.781],[-44.397,-0.781],[-44.397,3.16],[-48.87,3.16],[-48.87,7.313],[-76.669,7.313],[-76.669,12.106],[-80.397,12.106],[-80.397,22.012],[-86.148,22.012]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[91.148,31.556],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":19,"ty":4,"nm":"Nube Outlines 3","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[450.983,-156.941,0],"ix":2},"a":{"a":0,"k":[91.148,31.556,0],"ix":1},"s":{"a":0,"k":[150,150,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-66.089,22.58],[-62.397,22.58],[-62.397,26.556],[86.148,26.556],[86.148,20.627],[81.71,20.627],[81.71,12.958],[73.722,12.958],[73.722,4.971],[62.538,4.971],[62.538,-3.87],[41.023,-3.87],[41.023,-8.45],[28.029,-8.45],[28.029,-15.16],[23.343,-15.16],[23.343,-21.124],[16.1,-21.124],[16.1,-26.556],[3.426,-26.556],[3.426,-22.509],[-17.024,-22.509],[-17.024,-17.397],[-22.03,-17.397],[-22.03,-13.562],[-30.87,-13.562],[-30.87,-0.781],[-44.397,-0.781],[-44.397,3.16],[-48.87,3.16],[-48.87,7.313],[-76.669,7.313],[-76.669,12.106],[-80.397,12.106],[-80.397,22.012],[-86.148,22.012]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[91.148,31.556],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":20,"ty":4,"nm":"Nube Outlines 2","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[44.983,-310.941,0],"ix":2},"a":{"a":0,"k":[91.148,31.556,0],"ix":1},"s":{"a":0,"k":[150,150,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-66.089,22.58],[-62.397,22.58],[-62.397,26.556],[86.148,26.556],[86.148,20.627],[81.71,20.627],[81.71,12.958],[73.722,12.958],[73.722,4.971],[62.538,4.971],[62.538,-3.87],[41.023,-3.87],[41.023,-8.45],[28.029,-8.45],[28.029,-15.16],[23.343,-15.16],[23.343,-21.124],[16.1,-21.124],[16.1,-26.556],[3.426,-26.556],[3.426,-22.509],[-17.024,-22.509],[-17.024,-17.397],[-22.03,-17.397],[-22.03,-13.562],[-30.87,-13.562],[-30.87,-0.781],[-44.397,-0.781],[-44.397,3.16],[-48.87,3.16],[-48.87,7.313],[-76.669,7.313],[-76.669,12.106],[-80.397,12.106],[-80.397,22.012],[-86.148,22.012]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[91.148,31.556],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":21,"ty":4,"nm":"Nube Outlines","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-409.017,-160.941,0],"ix":2},"a":{"a":0,"k":[91.148,31.556,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-66.089,22.58],[-62.397,22.58],[-62.397,26.556],[86.148,26.556],[86.148,20.627],[81.71,20.627],[81.71,12.958],[73.722,12.958],[73.722,4.971],[62.538,4.971],[62.538,-3.87],[41.023,-3.87],[41.023,-8.45],[28.029,-8.45],[28.029,-15.16],[23.343,-15.16],[23.343,-21.124],[16.1,-21.124],[16.1,-26.556],[3.426,-26.556],[3.426,-22.509],[-17.024,-22.509],[-17.024,-17.397],[-22.03,-17.397],[-22.03,-13.562],[-30.87,-13.562],[-30.87,-0.781],[-44.397,-0.781],[-44.397,3.16],[-48.87,3.16],[-48.87,7.313],[-76.669,7.313],[-76.669,12.106],[-80.397,12.106],[-80.397,22.012],[-86.148,22.012]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[91.148,31.556],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":22,"ty":4,"nm":"Lineas 4","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[2994.299,154.207,0],"ix":2},"a":{"a":0,"k":[513.79,23.13,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[5,43.982],[10.746,43.982]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[68.687,39.508],[76.781,39.508]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[242.935,38.656],[245.066,38.656]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[257.42,30.988],[268.071,30.988]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[282.344,40.36],[297.468,40.36]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[397.16,30.988],[400.994,30.988]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[526.888,31.839],[532.639,31.839]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[464.261,35.675],[468.734,35.675]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[443.172,26.514],[455.314,26.514]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[594.414,39.934],[598.888,39.934]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":2,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[611.669,39.934],[619.977,39.934]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":2,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[927.361,39.295],[931.195,39.295]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":2,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[964.213,44.124],[973.799,44.124]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":2,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[984.45,27.153],[998.509,27.153]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":2,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[813.822,45.259],[821.704,45.259]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 15","np":2,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[751.195,36.1],[754.603,36.1]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 16","np":2,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[779.101,31.627],[796.781,31.627]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 17","np":2,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[755.456,45.259],[771.432,45.259]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 18","np":2,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[676,39.934],[693.468,39.934]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 19","np":2,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-508.79,-0.214],[-478.121,-0.214],[-478.121,-4.048],[-471.837,-4.048],[-471.837,-8.946],[-416.56,-8.946],[-416.56,-4.58],[-410.169,-4.58],[-410.169,-0.214],[-352.654,-0.214],[-352.654,5.111],[-347.328,5.111],[-347.328,8.946],[-296.843,8.946],[-296.843,4.367],[-290.453,4.367],[-290.453,-0.214],[508.79,-0.214]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[513.79,13.947],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 20","np":2,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":23,"ty":4,"nm":"Lineas 3","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[2002.299,154.207,0],"ix":2},"a":{"a":0,"k":[513.79,23.13,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[5,43.982],[10.746,43.982]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[68.687,39.508],[76.781,39.508]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[242.935,38.656],[245.066,38.656]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[257.42,30.988],[268.071,30.988]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[282.344,40.36],[297.468,40.36]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[397.16,30.988],[400.994,30.988]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[526.888,31.839],[532.639,31.839]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[464.261,35.675],[468.734,35.675]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[443.172,26.514],[455.314,26.514]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[594.414,39.934],[598.888,39.934]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":2,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[611.669,39.934],[619.977,39.934]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":2,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[927.361,39.295],[931.195,39.295]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":2,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[964.213,44.124],[973.799,44.124]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":2,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[984.45,27.153],[998.509,27.153]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":2,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[813.822,45.259],[821.704,45.259]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 15","np":2,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[751.195,36.1],[754.603,36.1]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 16","np":2,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[779.101,31.627],[796.781,31.627]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 17","np":2,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[755.456,45.259],[771.432,45.259]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 18","np":2,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[676,39.934],[693.468,39.934]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 19","np":2,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-508.79,-0.214],[-478.121,-0.214],[-478.121,-4.048],[-471.837,-4.048],[-471.837,-8.946],[-416.56,-8.946],[-416.56,-4.58],[-410.169,-4.58],[-410.169,-0.214],[-352.654,-0.214],[-352.654,5.111],[-347.328,5.111],[-347.328,8.946],[-296.843,8.946],[-296.843,4.367],[-290.453,4.367],[-290.453,-0.214],[508.79,-0.214]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[513.79,13.947],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 20","np":2,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":24,"ty":4,"nm":"Lineas 2","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[985.299,154.207,0],"ix":2},"a":{"a":0,"k":[513.79,23.13,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[5,43.982],[10.746,43.982]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[68.687,39.508],[76.781,39.508]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[242.935,38.656],[245.066,38.656]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[257.42,30.988],[268.071,30.988]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[282.344,40.36],[297.468,40.36]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[397.16,30.988],[400.994,30.988]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[526.888,31.839],[532.639,31.839]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[464.261,35.675],[468.734,35.675]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[443.172,26.514],[455.314,26.514]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[594.414,39.934],[598.888,39.934]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":2,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[611.669,39.934],[619.977,39.934]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":2,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[927.361,39.295],[931.195,39.295]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":2,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[964.213,44.124],[973.799,44.124]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":2,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[984.45,27.153],[998.509,27.153]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":2,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[813.822,45.259],[821.704,45.259]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 15","np":2,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[751.195,36.1],[754.603,36.1]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 16","np":2,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[779.101,31.627],[796.781,31.627]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 17","np":2,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[755.456,45.259],[771.432,45.259]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 18","np":2,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[676,39.934],[693.468,39.934]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 19","np":2,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-508.79,-0.214],[-478.121,-0.214],[-478.121,-4.048],[-471.837,-4.048],[-471.837,-8.946],[-416.56,-8.946],[-416.56,-4.58],[-410.169,-4.58],[-410.169,-0.214],[-352.654,-0.214],[-352.654,5.111],[-347.328,5.111],[-347.328,8.946],[-296.843,8.946],[-296.843,4.367],[-290.453,4.367],[-290.453,-0.214],[508.79,-0.214]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[513.79,13.947],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 20","np":2,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":25,"ty":4,"nm":"Lineas","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-31.701,154.207,0],"ix":2},"a":{"a":0,"k":[513.79,23.13,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[5,43.982],[10.746,43.982]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[68.687,39.508],[76.781,39.508]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[242.935,38.656],[245.066,38.656]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[257.42,30.988],[268.071,30.988]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[282.344,40.36],[297.468,40.36]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[397.16,30.988],[400.994,30.988]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[526.888,31.839],[532.639,31.839]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[464.261,35.675],[468.734,35.675]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[443.172,26.514],[455.314,26.514]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[594.414,39.934],[598.888,39.934]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":2,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[611.669,39.934],[619.977,39.934]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":2,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[927.361,39.295],[931.195,39.295]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":2,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[964.213,44.124],[973.799,44.124]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":2,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[984.45,27.153],[998.509,27.153]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":2,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[813.822,45.259],[821.704,45.259]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 15","np":2,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[751.195,36.1],[754.603,36.1]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 16","np":2,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[779.101,31.627],[796.781,31.627]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 17","np":2,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[755.456,45.259],[771.432,45.259]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 18","np":2,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[676,39.934],[693.468,39.934]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 19","np":2,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-508.79,-0.214],[-478.121,-0.214],[-478.121,-4.048],[-471.837,-4.048],[-471.837,-8.946],[-416.56,-8.946],[-416.56,-4.58],[-410.169,-4.58],[-410.169,-0.214],[-352.654,-0.214],[-352.654,5.111],[-347.328,5.111],[-347.328,8.946],[-296.843,8.946],[-296.843,4.367],[-290.453,4.367],[-290.453,-0.214],[508.79,-0.214]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[513.79,13.947],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 20","np":2,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":26,"ty":4,"nm":"Nube Outlines 8","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[3011.222,-156.941,0],"ix":2},"a":{"a":0,"k":[91.148,31.556,0],"ix":1},"s":{"a":0,"k":[150,150,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-66.089,22.58],[-62.397,22.58],[-62.397,26.556],[86.148,26.556],[86.148,20.627],[81.71,20.627],[81.71,12.958],[73.722,12.958],[73.722,4.971],[62.538,4.971],[62.538,-3.87],[41.023,-3.87],[41.023,-8.45],[28.029,-8.45],[28.029,-15.16],[23.343,-15.16],[23.343,-21.124],[16.1,-21.124],[16.1,-26.556],[3.426,-26.556],[3.426,-22.509],[-17.024,-22.509],[-17.024,-17.397],[-22.03,-17.397],[-22.03,-13.562],[-30.87,-13.562],[-30.87,-0.781],[-44.397,-0.781],[-44.397,3.16],[-48.87,3.16],[-48.87,7.313],[-76.669,7.313],[-76.669,12.106],[-80.397,12.106],[-80.397,22.012],[-86.148,22.012]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[91.148,31.556],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":27,"ty":4,"nm":"Nube Outlines 7","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[2605.222,-310.941,0],"ix":2},"a":{"a":0,"k":[91.148,31.556,0],"ix":1},"s":{"a":0,"k":[150,150,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-66.089,22.58],[-62.397,22.58],[-62.397,26.556],[86.148,26.556],[86.148,20.627],[81.71,20.627],[81.71,12.958],[73.722,12.958],[73.722,4.971],[62.538,4.971],[62.538,-3.87],[41.023,-3.87],[41.023,-8.45],[28.029,-8.45],[28.029,-15.16],[23.343,-15.16],[23.343,-21.124],[16.1,-21.124],[16.1,-26.556],[3.426,-26.556],[3.426,-22.509],[-17.024,-22.509],[-17.024,-17.397],[-22.03,-17.397],[-22.03,-13.562],[-30.87,-13.562],[-30.87,-0.781],[-44.397,-0.781],[-44.397,3.16],[-48.87,3.16],[-48.87,7.313],[-76.669,7.313],[-76.669,12.106],[-80.397,12.106],[-80.397,22.012],[-86.148,22.012]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[91.148,31.556],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":28,"ty":4,"nm":"Nube Outlines 6","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[2151.222,-160.941,0],"ix":2},"a":{"a":0,"k":[91.148,31.556,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-66.089,22.58],[-62.397,22.58],[-62.397,26.556],[86.148,26.556],[86.148,20.627],[81.71,20.627],[81.71,12.958],[73.722,12.958],[73.722,4.971],[62.538,4.971],[62.538,-3.87],[41.023,-3.87],[41.023,-8.45],[28.029,-8.45],[28.029,-15.16],[23.343,-15.16],[23.343,-21.124],[16.1,-21.124],[16.1,-26.556],[3.426,-26.556],[3.426,-22.509],[-17.024,-22.509],[-17.024,-17.397],[-22.03,-17.397],[-22.03,-13.562],[-30.87,-13.562],[-30.87,-0.781],[-44.397,-0.781],[-44.397,3.16],[-48.87,3.16],[-48.87,7.313],[-76.669,7.313],[-76.669,12.106],[-80.397,12.106],[-80.397,22.012],[-86.148,22.012]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[91.148,31.556],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":29,"ty":1,"nm":"White Solid 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[540,540,0],"ix":2},"a":{"a":0,"k":[540,540,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"sw":1080,"sh":1080,"sc":"#ffffff","ip":0,"op":120,"st":0,"bm":0}],"markers":[{"tm":12,"cm":"1","dr":0}]} \ No newline at end of file diff --git a/fe/src/assets/react.svg b/fe/src/assets/react.svg deleted file mode 100644 index 6c87de9..0000000 --- a/fe/src/assets/react.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/fe/src/components/common/CustomAlertDialog.tsx b/fe/src/components/common/CustomAlertDialog.tsx index 9421be0..8d5c1b3 100644 --- a/fe/src/components/common/CustomAlertDialog.tsx +++ b/fe/src/components/common/CustomAlertDialog.tsx @@ -14,6 +14,7 @@ interface CustomAlertDialogProps { title: string; description?: string; actionText?: string; + handleClick?: () => void; } const CustomAlertDialog = ({ @@ -22,6 +23,7 @@ const CustomAlertDialog = ({ title, description, actionText = '확인', + handleClick, }: CustomAlertDialogProps) => { return ( @@ -33,7 +35,10 @@ const CustomAlertDialog = ({ )} - + {actionText} diff --git a/fe/src/components/common/NotFound.tsx b/fe/src/components/common/NotFound.tsx deleted file mode 100644 index 46fbd11..0000000 --- a/fe/src/components/common/NotFound.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { Button } from '@/components/ui/button'; -import Lottie from 'lottie-react'; -import LottieFile from '@/assets/lottie/404.json'; - -export const NotFound = () => { - return ( -
-
- -
-

- 앗! 방을 찾을 수 없습니다. -

-

- 방이 삭제되었거나 존재하지 않는 방입니다. -

- -
- ); -}; diff --git a/fe/src/components/common/SearchBar.tsx b/fe/src/components/common/SearchBar.tsx index 9c4d8f0..b6ca7cd 100644 --- a/fe/src/components/common/SearchBar.tsx +++ b/fe/src/components/common/SearchBar.tsx @@ -9,14 +9,15 @@ import { getRoomsQuery } from '@/stores/queries/getRoomsQuery'; const SearchBar = () => { const [searchTerm, setSearchTerm] = useState(''); const debouncedSearch = useDebounce(searchTerm, 200); // 200ms 디바운스 - const { setRooms } = useRoomStore(); + const { setRooms, userPage } = useRoomStore(); const { data: searchResults } = searchRoomsQuery(debouncedSearch); - const { data: allRooms, refetch: refetchAllRooms } = getRoomsQuery(); + const { data: roomsData, refetch: refetchAllRooms } = getRoomsQuery(userPage); // 검색 결과 또는 전체 방 목록으로 업데이트 useEffect(() => { - if (!debouncedSearch.trim()) { + if (!debouncedSearch.trim() && roomsData?.rooms) { refetchAllRooms(); + setRooms(roomsData.rooms); return; } @@ -24,14 +25,7 @@ const SearchBar = () => { if (searchResults) { setRooms(searchResults); } - }, [debouncedSearch, searchResults, setRooms, refetchAllRooms]); - - // allRooms가 업데이트되면 방 목록 갱신 - useEffect(() => { - if (!debouncedSearch.trim() && allRooms) { - setRooms(allRooms); - } - }, [allRooms, debouncedSearch, setRooms]); + }, [debouncedSearch, searchResults, roomsData, setRooms, refetchAllRooms]); return (
diff --git a/fe/src/components/game/PitchVisualizer.tsx b/fe/src/components/game/PitchVisualizer.tsx index eda0771..468a2c6 100644 --- a/fe/src/components/game/PitchVisualizer.tsx +++ b/fe/src/components/game/PitchVisualizer.tsx @@ -3,7 +3,6 @@ import useGameStore from '@/stores/zustand/useGameStore'; import useRoomStore from '@/stores/zustand/useRoomStore'; import usePitchStore from '@/stores/zustand/usePitchStore'; import { signalingSocket } from '@/services/signalingSocket'; -import angryPepe from '@/assets/images/angry-pepe.png'; import { PITCH_CONSTANTS } from '@/constants/pitch'; import { usePitchDetection } from '@/hooks/usePitchDetection'; @@ -102,7 +101,7 @@ const PitchVisualizer = ({ isGameplayPhase }: PitchVisualizerProps) => { }} > Angry Pepe, @@ -16,14 +16,14 @@ const AlertDialogOverlay = React.forwardRef< >(({ className, ...props }, ref) => ( -)) -AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName +)); +AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName; const AlertDialogContent = React.forwardRef< React.ElementRef, @@ -34,14 +34,14 @@ const AlertDialogContent = React.forwardRef< -)) -AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName +)); +AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName; const AlertDialogHeader = ({ className, @@ -49,13 +49,13 @@ const AlertDialogHeader = ({ }: React.HTMLAttributes) => (
-) -AlertDialogHeader.displayName = "AlertDialogHeader" +); +AlertDialogHeader.displayName = 'AlertDialogHeader'; const AlertDialogFooter = ({ className, @@ -63,13 +63,13 @@ const AlertDialogFooter = ({ }: React.HTMLAttributes) => (
-) -AlertDialogFooter.displayName = "AlertDialogFooter" +); +AlertDialogFooter.displayName = 'AlertDialogFooter'; const AlertDialogTitle = React.forwardRef< React.ElementRef, @@ -77,11 +77,11 @@ const AlertDialogTitle = React.forwardRef< >(({ className, ...props }, ref) => ( -)) -AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName +)); +AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName; const AlertDialogDescription = React.forwardRef< React.ElementRef, @@ -89,12 +89,12 @@ const AlertDialogDescription = React.forwardRef< >(({ className, ...props }, ref) => ( -)) +)); AlertDialogDescription.displayName = - AlertDialogPrimitive.Description.displayName + AlertDialogPrimitive.Description.displayName; const AlertDialogAction = React.forwardRef< React.ElementRef, @@ -105,8 +105,8 @@ const AlertDialogAction = React.forwardRef< className={cn(buttonVariants(), className)} {...props} /> -)) -AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName +)); +AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName; const AlertDialogCancel = React.forwardRef< React.ElementRef, @@ -115,14 +115,15 @@ const AlertDialogCancel = React.forwardRef< -)) -AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName +)); +AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName; export { AlertDialog, @@ -136,4 +137,4 @@ export { AlertDialogDescription, AlertDialogAction, AlertDialogCancel, -} +}; diff --git a/fe/src/components/ui/dialog.tsx b/fe/src/components/ui/dialog.tsx index c23630e..8a87901 100644 --- a/fe/src/components/ui/dialog.tsx +++ b/fe/src/components/ui/dialog.tsx @@ -1,16 +1,16 @@ -import * as React from "react" -import * as DialogPrimitive from "@radix-ui/react-dialog" -import { X } from "lucide-react" +import * as React from 'react'; +import * as DialogPrimitive from '@radix-ui/react-dialog'; +import { X } from 'lucide-react'; -import { cn } from "@/lib/utils" +import { cn } from '@/lib/utils'; -const Dialog = DialogPrimitive.Root +const Dialog = DialogPrimitive.Root; -const DialogTrigger = DialogPrimitive.Trigger +const DialogTrigger = DialogPrimitive.Trigger; -const DialogPortal = DialogPrimitive.Portal +const DialogPortal = DialogPrimitive.Portal; -const DialogClose = DialogPrimitive.Close +const DialogClose = DialogPrimitive.Close; const DialogOverlay = React.forwardRef< React.ElementRef, @@ -19,13 +19,13 @@ const DialogOverlay = React.forwardRef< -)) -DialogOverlay.displayName = DialogPrimitive.Overlay.displayName +)); +DialogOverlay.displayName = DialogPrimitive.Overlay.displayName; const DialogContent = React.forwardRef< React.ElementRef, @@ -36,20 +36,20 @@ const DialogContent = React.forwardRef< {children} - + {/* Close - + */} -)) -DialogContent.displayName = DialogPrimitive.Content.displayName +)); +DialogContent.displayName = DialogPrimitive.Content.displayName; const DialogHeader = ({ className, @@ -57,13 +57,13 @@ const DialogHeader = ({ }: React.HTMLAttributes) => (
-) -DialogHeader.displayName = "DialogHeader" +); +DialogHeader.displayName = 'DialogHeader'; const DialogFooter = ({ className, @@ -71,13 +71,13 @@ const DialogFooter = ({ }: React.HTMLAttributes) => (
-) -DialogFooter.displayName = "DialogFooter" +); +DialogFooter.displayName = 'DialogFooter'; const DialogTitle = React.forwardRef< React.ElementRef, @@ -86,13 +86,13 @@ const DialogTitle = React.forwardRef< -)) -DialogTitle.displayName = DialogPrimitive.Title.displayName +)); +DialogTitle.displayName = DialogPrimitive.Title.displayName; const DialogDescription = React.forwardRef< React.ElementRef, @@ -100,11 +100,11 @@ const DialogDescription = React.forwardRef< >(({ className, ...props }, ref) => ( -)) -DialogDescription.displayName = DialogPrimitive.Description.displayName +)); +DialogDescription.displayName = DialogPrimitive.Description.displayName; export { Dialog, @@ -117,4 +117,4 @@ export { DialogFooter, DialogTitle, DialogDescription, -} +}; diff --git a/fe/src/components/ui/slider.tsx b/fe/src/components/ui/slider.tsx index e161dae..b7ed651 100644 --- a/fe/src/components/ui/slider.tsx +++ b/fe/src/components/ui/slider.tsx @@ -1,7 +1,7 @@ -import * as React from "react" -import * as SliderPrimitive from "@radix-ui/react-slider" +import * as React from 'react'; +import * as SliderPrimitive from '@radix-ui/react-slider'; -import { cn } from "@/lib/utils" +import { cn } from '@/lib/utils'; const Slider = React.forwardRef< React.ElementRef, @@ -10,17 +10,17 @@ const Slider = React.forwardRef< - + - + -)) -Slider.displayName = SliderPrimitive.Root.displayName +)); +Slider.displayName = SliderPrimitive.Root.displayName; -export { Slider } +export { Slider }; diff --git a/fe/src/constants/errors.ts b/fe/src/constants/errors.ts new file mode 100644 index 0000000..e69a0fe --- /dev/null +++ b/fe/src/constants/errors.ts @@ -0,0 +1,20 @@ +export const ERROR_MESSAGES = Object.freeze({ + emptyNickname: '닉네임을 입력해주세요.', + duplicatedNickname: '이미 사용 중인 닉네임입니다.', + emptyRoomName: '방 제목을 입력해주세요.', + invalidNickname: '닉네임은 한글, 영문, 숫자, 공백만 사용 가능합니다.', + nicknameLength: '닉네임은 2~8자로 입력해주세요.', + roomNameLength: '방 제목은 2~12자로 입력해주세요.', +}); + +export const ERROR_CODES = Object.freeze({ + duplicatedNickname: 'NicknameTaken', + validation: 'ValidationFailed', + noRoom: 'RoomNotFound', + noGame: 'GameNotFound', + noPlayer: 'PlayerNotFound', + serverError: 'InternalError', + fullRoom: 'RoomFull', + notAllReady: 'AllPlayersMustBeReady', + notEnoughPlayers: 'NotEnoughPlayers', +}); diff --git a/fe/src/constants/rules.ts b/fe/src/constants/rules.ts index f17a3b9..de09f9c 100644 --- a/fe/src/constants/rules.ts +++ b/fe/src/constants/rules.ts @@ -1,4 +1,5 @@ export const RULES = Object.freeze({ maxPage: 9, maxPlayer: 4, + pageLimit: 9, }); diff --git a/fe/src/hooks/useBackExit.ts b/fe/src/hooks/useBackExit.ts index 6c2e64b..32c459b 100644 --- a/fe/src/hooks/useBackExit.ts +++ b/fe/src/hooks/useBackExit.ts @@ -1,9 +1,6 @@ import { useEffect, useRef } from 'react'; -import { useLocation } from 'react-router-dom'; export const useBackExit = ({ setShowExitDialog }) => { - const location = useLocation(); - const isInitialRender = useRef(true); const popStateListenerRef = useRef<(() => void) | null>(null); // 컴포넌트 마운트 시 한 번만 실행 diff --git a/fe/src/hooks/useDialogForm.ts b/fe/src/hooks/useDialogForm.ts index 27f0971..5763ff9 100644 --- a/fe/src/hooks/useDialogForm.ts +++ b/fe/src/hooks/useDialogForm.ts @@ -14,15 +14,16 @@ export const useDialogForm = ({ inputs, onSubmit, isSubmitDisabled, -}: UseDialogFormProps) => { + open, +}: UseDialogFormProps & { open: boolean }) => { const inputRefs = useRef<(HTMLInputElement | null)[]>([]); useEffect(() => { // 첫 번째 입력 필드에 포커스 - if (inputRefs.current[0]) { + if (open && inputRefs.current[0]) { inputRefs.current[0].focus(); } - }, []); + }, [open]); const handleKeyDown = ( event: KeyboardEvent, diff --git a/fe/src/hooks/useFormValidation.ts b/fe/src/hooks/useFormValidation.ts new file mode 100644 index 0000000..20ad66c --- /dev/null +++ b/fe/src/hooks/useFormValidation.ts @@ -0,0 +1,94 @@ +import { validateNickname, validateRoomName } from '@/utils/validator'; +import { useEffect, useState } from 'react'; +import { useDebounce } from './useDebounce'; + +export const useFormValidation = () => { + const [errors, setErrors] = useState({ + nickname: '', + roomName: '', + }); + + // 각 필드의 사용자 상호작용 여부를 저장하는 상태 + // touched가 true인 필드만 유효성 검사 실행 + const [touched, setTouched] = useState({ + nickname: false, + roomName: false, + }); + + // 실제 입력값을 저장하는 상태 + const [inputs, setInputs] = useState({ + nickname: '', + roomName: '', + }); + + // 입력값을 디바운스 처리할 state + const debouncedInputs = useDebounce(inputs, 200); + + // 디바운스된 입력값이 변경될 때마다 유효성 검증 + useEffect(() => { + const newErrors = { + // 닉네임 필드가 터치되었을 때만 유효성 검사 + nickname: touched.nickname + ? debouncedInputs.nickname === '' + ? '닉네임을 입력해주세요.' + : validateNickname(debouncedInputs.nickname) + : '', + // 방 제목 필드가 터치되었을 때만 유효성 검사 + roomName: touched.roomName + ? debouncedInputs.roomName === '' + ? '방 제목을 입력해주세요.' + : validateRoomName(debouncedInputs.roomName) + : '', + }; + setErrors(newErrors); + }, [debouncedInputs, touched]); + + // 입력값 업데이트 함수 + const updateInput = (field: 'nickname' | 'roomName', value: string) => { + setInputs((prev) => ({ + ...prev, + [field]: value, + })); + + // 입력이 발생한 필드를 터치 상태로 변경 + setTouched((prev) => ({ + ...prev, + [field]: true, + })); + }; + + // 최종 제출 시 유효성 검증 + const validateForm = (nickname: string, roomName?: string) => { + // 제출 시에는 모든 필드를 터치 상태로 설정 + setTouched({ + nickname: true, + roomName: true, + }); + + const newErrors = { + nickname: validateNickname(nickname), + roomName: roomName ? validateRoomName(roomName) : '', + }; + + setErrors(newErrors); + return !Object.values(newErrors).some((error) => error !== ''); + }; + + // 폼 상태 초기화 (다이얼로그 닫을 때 사용) + const resetForm = () => { + setTouched({ + nickname: false, + roomName: false, + }); + setErrors({ + nickname: '', + roomName: '', + }); + setInputs({ + nickname: '', + roomName: '', + }); + }; + + return { errors, validateForm, updateInput, setErrors, resetForm }; +}; diff --git a/fe/src/hooks/usePagination.ts b/fe/src/hooks/usePagination.ts deleted file mode 100644 index b6269cd..0000000 --- a/fe/src/hooks/usePagination.ts +++ /dev/null @@ -1,31 +0,0 @@ -import useRoomStore from '@/stores/zustand/useRoomStore'; -import { useState, useEffect } from 'react'; - -const ROOMS_PER_PAGE = 9; - -export const usePagination = () => { - const rooms = useRoomStore((state) => state.rooms); - const [currentPage, setCurrentPage] = useState(0); - - const totalPages = Math.ceil(rooms.length / ROOMS_PER_PAGE); - - const currentRooms = rooms.slice( - currentPage * ROOMS_PER_PAGE, - (currentPage + 1) * ROOMS_PER_PAGE - ); - - useEffect(() => { - if (rooms.length > ROOMS_PER_PAGE * (currentPage + 1)) { - setCurrentPage(currentPage + 1); - } - }, [rooms.length, currentPage]); - - return { - currentPage, - setCurrentPage, - totalPages, - currentRooms, - isEmpty: rooms.length === 0, - showPagination: rooms.length > ROOMS_PER_PAGE, - }; -}; diff --git a/fe/src/hooks/usePreventRefresh.ts b/fe/src/hooks/usePreventRefresh.ts new file mode 100644 index 0000000..b295be4 --- /dev/null +++ b/fe/src/hooks/usePreventRefresh.ts @@ -0,0 +1,34 @@ +import { useEffect } from 'react'; +import { toast } from 'react-toastify'; + +export const usePreventRefresh = (isPlaying: boolean) => { + useEffect(() => { + if (!isPlaying) return; + + const preventKeyboardRefresh = (e: KeyboardEvent) => { + if ( + e.key === 'F5' || + (e.ctrlKey && e.key === 'r') || + (e.metaKey && e.key === 'r') + ) { + e.preventDefault(); + + toast.error('게임 중에는 새로고침 할 수 없습니다!', { + position: 'top-left', + autoClose: 1000, + style: { + fontFamily: 'Galmuri11, monospace', + width: '25rem', + minWidth: '25rem', + }, + }); + } + }; + + document.addEventListener('keydown', preventKeyboardRefresh); + + return () => { + document.removeEventListener('keydown', preventKeyboardRefresh); + }; + }, [isPlaying]); +}; diff --git a/fe/src/hooks/useReconnect.ts b/fe/src/hooks/useReconnect.ts index 20d8809..c0ef95e 100644 --- a/fe/src/hooks/useReconnect.ts +++ b/fe/src/hooks/useReconnect.ts @@ -19,42 +19,46 @@ export const useReconnect = ({ currentRoom }) => { const handleReconnect = async () => { try { if (room && !currentRoom) { - // 1. 현재 방 설정 + // 현재 방 설정 setCurrentRoom(room); - // 2. 소켓 연결 + // 게임 소켓 연결 if (!gameSocket.socket?.connected) { gameSocket.connect(); + await gameSocket.joinRoom(roomId, nickname); } + // 마이크 권한 요청 및 스트림 설정 + const stream = await requestPermission(); + if (!signalingSocket.socket?.connected) { console.log('Connecting signalingSocket...'); signalingSocket.connect(); + await signalingSocket.setupLocalStream(stream); } - // 3. audioManager 설정 (소켓 연결 후) + // audioManager 설정 (소켓 연결 후) if (!signalingSocket.hasAudioManager()) { signalingSocket.setAudioManager(audioManager); } - // 4. 마이크 권한 요청 및 스트림 설정 - const stream = await requestPermission(); - signalingSocket.setupLocalStream(stream); - - // 5. 방 참가 - gameSocket.joinRoom(roomId, nickname); - signalingSocket.joinRoom(room, nickname); + // 시그널링 방 참가 + await signalingSocket.joinRoom(room, nickname); } } catch (error) { console.error('Reconnection failed:', error); // 실패 시 audioManager 제거 signalingSocket.setAudioManager(null); + + if (error === 'GameAlreadyInProgress') { + sessionStorage.setItem('gameInProgressError', 'true'); + window.location.href = '/rooms'; + } } }; handleReconnect(); - // cleanup return () => { signalingSocket.setAudioManager(null); }; diff --git a/fe/src/hooks/useRoomsSSE.ts b/fe/src/hooks/useRoomsSSE.ts index 797bb54..00ebcec 100644 --- a/fe/src/hooks/useRoomsSSE.ts +++ b/fe/src/hooks/useRoomsSSE.ts @@ -1,47 +1,53 @@ import useRoomStore from '@/stores/zustand/useRoomStore'; import { useEffect } from 'react'; -import { Room } from '@/types/roomTypes'; import { ENV } from '@/config/env'; import { getRoomsQuery } from '@/stores/queries/getRoomsQuery'; -export const useRoomsSSE = () => { - const { data: initialRooms } = getRoomsQuery(); - const { setRooms } = useRoomStore(); +let eventSource: EventSource | null = null; - useEffect(() => { - // 초기 데이터 설정 - if (initialRooms) { - setRooms(initialRooms); - } +export const useRoomsSSE = () => { + const { setRooms, setPagination, setUserPage } = useRoomStore(); + const userPage = useRoomStore((state) => state.userPage); + const { data } = getRoomsQuery(userPage); - // SSE 연결 - const eventSource = new EventSource(ENV.SSE_URL); + const connectSSE = (userPage: number) => { + eventSource = new EventSource(`${ENV.SSE_URL}?page=${userPage}`); - // rooms 데이터 수신 처리 eventSource.onmessage = (event) => { try { - const rooms = JSON.parse(event.data) as Room[]; - setRooms(rooms); + const sseData = JSON.parse(event.data); + setRooms(sseData.rooms); + setPagination(sseData.pagination); + + if (!sseData.rooms.length && userPage > 0) { + setUserPage(sseData.pagination.currentPage - 1); + return; + } + + setUserPage(sseData.pagination.currentPage); } catch (error) { console.error('Failed to parse rooms data:', error); } }; - // 연결 시작 - eventSource.onopen = () => { - console.log('SSE Connection opened'); - }; - - // 에러 처리 eventSource.onerror = (error) => { console.error('SSE Error:', error); eventSource.close(); }; + }; + + useEffect(() => { + if (data) { + setRooms(data.rooms); + setPagination(data.pagination); + connectSSE(userPage); + } - // 컴포넌트 언마운트 시 연결 정리 (메모리 누수 예방) return () => { - console.log('Closing SSE connection'); - eventSource.close(); + if (eventSource) { + eventSource.close(); + eventSource = null; + } }; - }, [initialRooms, setRooms]); + }, [data?.pagination, data?.rooms, userPage]); }; diff --git a/fe/src/index.css b/fe/src/index.css index 3bf5def..3504613 100644 --- a/fe/src/index.css +++ b/fe/src/index.css @@ -12,6 +12,7 @@ font-weight: normal; font-style: normal; } + :root { --background: 0 0% 100%; --foreground: 222.2 84% 4.9%; @@ -71,7 +72,7 @@ @apply border-border; } body { - @apply bg-background text-foreground; + @apply bg-background text-foreground relative; } } @@ -93,7 +94,6 @@ html, body, #root { height: 100%; - overflow: hidden; } body { @@ -103,3 +103,11 @@ body { .app { @apply flex flex-col mx-auto justify-center max-w-[1074px] lg:px-0 p-8; } + +.game-wrapper { + @apply relative w-full min-h-screen; +} + +.game-wrapper::before { + @apply content-[''] fixed inset-0 w-full h-full bg-main-desert bg-cover bg-center opacity-75 -z-10; +} diff --git a/fe/src/pages/GamePage/GameDialog/ExitDialog.tsx b/fe/src/pages/GamePage/GameDialog/ExitDialog.tsx index 7abd88f..f1df985 100644 --- a/fe/src/pages/GamePage/GameDialog/ExitDialog.tsx +++ b/fe/src/pages/GamePage/GameDialog/ExitDialog.tsx @@ -26,7 +26,7 @@ const ExitDialog = ({ open, onOpenChange }: RoomDialogProps) => { setCurrentRoom(null); resetGame(); - navigate('/'); + navigate('/rooms'); }; return ( diff --git a/fe/src/pages/GamePage/GameScreen/EndScreen.tsx b/fe/src/pages/GamePage/GameScreen/EndScreen.tsx index cf5aa50..ee2bb96 100644 --- a/fe/src/pages/GamePage/GameScreen/EndScreen.tsx +++ b/fe/src/pages/GamePage/GameScreen/EndScreen.tsx @@ -3,13 +3,29 @@ import podiumAnimation from '@/assets/lottie/podium.json'; import useGameStore from '@/stores/zustand/useGameStore'; import { motion } from 'framer-motion'; import { Button } from '@/components/ui/button'; +import { useParams } from 'react-router-dom'; +import { getCurrentRoomQuery } from '@/stores/queries/getCurrentRoomQuery'; +import useRoomStore from '@/stores/zustand/useRoomStore'; const EndScreen = () => { const rank = useGameStore((state) => state.rank); const resetGame = useGameStore((state) => state.resetGame); + const { roomId } = useParams(); + const { refetch } = getCurrentRoomQuery(roomId); + const { setCurrentRoom } = useRoomStore(); - const handleGameEnd = () => { - resetGame(); + const handleGameEnd = async () => { + try { + resetGame(); + // room 정보 다시 가져오기 + const { data } = await refetch(); + // 새로운 room 정보로 상태 업데이트 + if (data) { + setCurrentRoom(data); + } + } catch (error) { + console.error('Failed to refresh room data:', error); + } }; const positions = { @@ -32,7 +48,7 @@ const EndScreen = () => { }; return ( -
+
{
{rank.slice(0, 3).map((playerName, index) => ( { ))}
- {/* 최종 순위 리스트 */} {
- {/* 게임 종료 버튼 */} { - const resultData = useGameStore((state) => state.resultData); + const { resultData, turnData } = useGameStore(); if (!resultData) return null; + const getResultText = () => { + const resultText = resultData.result === 'PASS' ? 'PASS!' : 'FAIL!'; + + if (turnData?.gameMode === 'CLEOPATRA') { + return `${resultData.note} ${resultText}`; + } + return `${resultData.pronounceScore}점 ${resultText}`; + }; + return ( { className="absolute inset-0 flex items-center justify-center" >
-
+
{resultData.playerNickname}
{ repeatType: 'loop', }} > - {resultData.result === 'PASS' ? 'PASS!' : 'FAIL!'} + {getResultText()}
diff --git a/fe/src/pages/GamePage/GameScreen/GameScreen.tsx b/fe/src/pages/GamePage/GameScreen/GameScreen.tsx index 54e576f..e0c1f03 100644 --- a/fe/src/pages/GamePage/GameScreen/GameScreen.tsx +++ b/fe/src/pages/GamePage/GameScreen/GameScreen.tsx @@ -15,7 +15,7 @@ const GameScreen = () => { setCurrentPlayer(nickname); } } - }, [currentPlayer, setCurrentPlayer]); + }, [currentPlayer]); return turnData ? : ; }; diff --git a/fe/src/pages/GamePage/GameScreen/PlayScreen.tsx b/fe/src/pages/GamePage/GameScreen/PlayScreen.tsx index 5918b5e..56a1caf 100644 --- a/fe/src/pages/GamePage/GameScreen/PlayScreen.tsx +++ b/fe/src/pages/GamePage/GameScreen/PlayScreen.tsx @@ -11,39 +11,45 @@ import { gameSocket } from '@/services/gameSocket'; import EndScreen from './EndScreen'; import ReadyScreen from './ReadyScreen'; import PitchVisualizer from '@/components/game/PitchVisualizer'; +import { useParams } from 'react-router-dom'; +import { usePreventRefresh } from '@/hooks/usePreventRefresh'; type GamePhase = 'intro' | 'gameplay' | 'grading' | 'result'; const PlayScreen = () => { - const { currentRoom, currentPlayer } = useRoomStore(); + const { currentPlayer } = useRoomStore(); const { setGameResult } = useGameStore(); const turnData = useGameStore((state) => state.turnData); const resultData = useGameStore((state) => state.resultData); const rank = useGameStore((state) => state.rank); const [gamePhase, setGamePhase] = useState('intro'); const [timeLeft, setTimeLeft] = useState(0); + const { roomId } = useParams(); const INTRO_TIME = 2000; const RESULT_TIME = 3000; + // 새로고침 방지 + usePreventRefresh(Boolean(turnData && rank.length === 0)); + // 턴 데이터 변경 시 게임 초기화 useEffect(() => { - if (!turnData && !resultData) return; + if (!turnData) return; if (rank.length > 0) return; setGamePhase('intro'); setGameResult(null); - const introTimer = setTimeout(() => { + const introTimer = setTimeout(async () => { setGamePhase('gameplay'); setTimeLeft(turnData.timeLimit); // gameplay 페이즈로 전환될 때 시간 설정 // 현재 플레이어 차례이고 게임 참여 가능한 경우에만 녹음 시작 - if (currentPlayer === turnData.playerNickname && currentRoom) { - voiceSocket + if (currentPlayer === turnData.playerNickname) { + await voiceSocket .startRecording( signalingSocket.getLocalStream(), - currentRoom.roomId, + roomId, currentPlayer ) .catch(console.error); @@ -51,7 +57,7 @@ const PlayScreen = () => { }, INTRO_TIME); return () => clearTimeout(introTimer); - }, [turnData, currentRoom, currentPlayer]); + }, [turnData]); // 타이머 처리 useEffect(() => { @@ -71,13 +77,13 @@ const PlayScreen = () => { }, 1000); return () => clearInterval(timer); - }, [gamePhase, currentPlayer, turnData]); + }, [gamePhase, turnData]); // 채점 중 -> 결과 화면 전환 useEffect(() => { - if (resultData && gamePhase === 'grading') { - setGamePhase('result'); - } + if (!resultData || gamePhase !== 'grading') return; + + setGamePhase('result'); }, [resultData, gamePhase]); // 다음 턴 result -> next 처리를 별도로 @@ -100,7 +106,7 @@ const PlayScreen = () => { if (!turnData && !rank.length) return; return ( -
+
{gamePhase === 'intro' && ( { 현재 차례 : {turnData.playerNickname}
- {turnData.gameMode === 'CLEOPATRA' ? '클레오파트라' : '발음 미션'} + {turnData.gameMode === 'CLEOPATRA' ? '클레오파트라' : '발음 게임'}
)} diff --git a/fe/src/pages/GamePage/GameScreen/ReadyScreen.tsx b/fe/src/pages/GamePage/GameScreen/ReadyScreen.tsx index 5b2ebfb..b001607 100644 --- a/fe/src/pages/GamePage/GameScreen/ReadyScreen.tsx +++ b/fe/src/pages/GamePage/GameScreen/ReadyScreen.tsx @@ -46,7 +46,7 @@ const ReadyScreen = () => { }; return ( -
+
{isHost ? ( )} - {!canStartGame && ( + {!canStartGame ? (

모든 플레이어가 준비를 완료해야 게임을 시작할 수 있습니다.

+ ) : ( +

+ 모든 플레이어가 준비 완료되었습니다. 게임을 시작해 주세요! +

)}
); diff --git a/fe/src/pages/GamePage/PlayerList/Player.tsx b/fe/src/pages/GamePage/PlayerList/Player.tsx index ef90152..a778535 100644 --- a/fe/src/pages/GamePage/PlayerList/Player.tsx +++ b/fe/src/pages/GamePage/PlayerList/Player.tsx @@ -1,5 +1,5 @@ import { Card, CardContent } from '@/components/ui/card'; -import { FaCrown, FaMicrophone, FaMicrophoneSlash } from 'react-icons/fa6'; +import { FaCrown, FaMicrophoneSlash, FaRegFaceSmile } from 'react-icons/fa6'; import VolumeBar from './VolumeBar'; import { PlayerProps } from '@/types/roomTypes'; import { isHost } from '@/utils/playerUtils'; @@ -12,7 +12,7 @@ import { gameSocket } from '@/services/gameSocket'; import MikeButton from '@/components/common/MikeButton'; import useGameStore from '@/stores/zustand/useGameStore'; -const Player = ({ playerNickname, isReady }: PlayerProps) => { +const Player = ({ playerNickname, isReady, isDead, isLeft }: PlayerProps) => { const { currentRoom, currentPlayer } = useRoomStore(); // 본인이 방장인지 const isCurrentPlayerHost = currentPlayer === currentRoom?.hostNickname; @@ -54,11 +54,34 @@ const Player = ({ playerNickname, isReady }: PlayerProps) => { return ( - +
- {isPlayerHost ? : ''} + {isPlayerHost ? ( + + ) : ( + + )} {playerNickname}
+ +
+ {isLeft ? ( + 탈주 + ) : isDead ? ( + 탈락 + ) : ( + '' + )} +
+
{isCurrentPlayer ? ( diff --git a/fe/src/pages/GamePage/PlayerList/PlayerList.tsx b/fe/src/pages/GamePage/PlayerList/PlayerList.tsx index d64634a..02ae2c3 100644 --- a/fe/src/pages/GamePage/PlayerList/PlayerList.tsx +++ b/fe/src/pages/GamePage/PlayerList/PlayerList.tsx @@ -17,7 +17,7 @@ const PlayerList = ({ players }: PlayerListProps) => { {Array.from({ length: emptySlots }).map((_, index) => (
))}
diff --git a/fe/src/pages/GamePage/PlayerList/VolumeBar.tsx b/fe/src/pages/GamePage/PlayerList/VolumeBar.tsx index 84de5c4..87453ea 100644 --- a/fe/src/pages/GamePage/PlayerList/VolumeBar.tsx +++ b/fe/src/pages/GamePage/PlayerList/VolumeBar.tsx @@ -46,9 +46,9 @@ const VolumeBar = ({ playerNickname }: VolumeBarProps) => { className="hover:opacity-80 transition-opacity" > {volumeLevel > 0 ? ( - + ) : ( - + )} { const [showJoinDialog, setShowJoinDialog] = useState(false); const [showExitDialog, setShowExitDialog] = useState(false); - const { currentRoom, kickedPlayer, setKickedPlayer } = useRoomStore(); + const { kickedPlayer, setKickedPlayer } = useRoomStore(); + const currentRoom = useRoomStore((state) => state.currentRoom); const audioManager = useAudioManager(); const { roomId } = useParams(); const { data: room } = getCurrentRoomQuery(roomId); const nickname = sessionStorage.getItem('user_nickname'); + useReconnect({ currentRoom }); + useBackExit({ setShowExitDialog }); + useEffect(() => { if (room && !currentRoom) { if (!nickname) { @@ -31,9 +35,6 @@ const GamePage = () => { } }, [room, currentRoom, nickname]); - useReconnect({ currentRoom }); - useBackExit({ setShowExitDialog }); - // 오디오 매니저 설정 useEffect(() => { signalingSocket.setAudioManager(audioManager); @@ -106,27 +107,34 @@ const GamePage = () => { } return ( -
-
- - ({ - playerNickname: player.playerNickname, - isReady: player.isReady, - }))} - /> -
-
-
- - +
+
+
+ + ({ + playerNickname: player.playerNickname, + isReady: player.isReady, + isDead: player.isDead, + isLeft: player.isLeft, + }))} + /> +
+
+
+ + +
+
-
); }; diff --git a/fe/src/pages/LandingPage/index.tsx b/fe/src/pages/LandingPage/index.tsx new file mode 100644 index 0000000..b5136bd --- /dev/null +++ b/fe/src/pages/LandingPage/index.tsx @@ -0,0 +1,214 @@ +import { Button } from '@/components/ui/button'; +import { Card } from '@/components/ui/card'; +import { Mic, Users, Volume2, Zap, Smartphone, Laptop } from 'lucide-react'; + +export default function LandingPage() { + return ( +
+
+
+
+ 안녕! 클로바파트라 +

+ 음성으로 즐기는 실시간 웹 게임! 친구들과 함께 목소리로 도전하세요. +

+ +

+ 회원가입 없이 즉시 플레이 가능! +

+
+
+ + + +
+
+ +
+
+

+ 주요 기능 +

+
+ +
+ +

+ 멀티플레이 +

+

+ 친구들과 함께 실시간으로 게임을 즐기세요. 최대 4명까지 참여 + 가능한 즐거운 경험! +

+
+
+ +
+ +

+ 음성 도전 +

+

+ 목소리로 진행되는 다양한 도전 과제! 발음과 음정을 분석하여 + 점수를 획득하고 승리를 쟁취하세요. +

+
+
+ +
+ +

+ 실시간 음성 채팅 +

+

+ 고품질 음성 채팅으로 끊김 없는 소통을 즐기세요. 게임 중 전략을 + 논의하거나 함께 웃고 떠들어보세요! +

+
+
+
+
+
+ +
+
+

+ 게임 모드 +

+
+ +
+

+ 클레오파트라 모드 +

+

+ 이전 참가자보다 높은 음을 내야 하는 도전 게임입니다. 얼마나 + 높은 음까지 낼 수 있을까요? 목소리 컨트롤의 달인이 되어보세요! +

+
+
+ 클레오파트라 모드 GIF +
+
+ +
+

+ 발음 도전 모드 +

+

+ 주어진 문장을 정확하게 발음하여 90점 이상을 획득해야 하는 도전 + 게임입니다. 당신의 발음 실력을 뽐내보세요! +

+
+
+ 발음 도전 모드 GIF{' '} +
+
+
+
+
+ +
+
+

+ 추가 특징 +

+
+ +
+ +

+ 간편한 시작 +

+

+ 회원가입이나 로그인 없이 즉시 게임을 시작할 수 있습니다. 클릭 + 한 번으로 친구들과 함께 즐겨보세요! +

+
+
+ +
+ +

+ 모바일 지원 +

+

+ 스마트폰이나 태블릿에서도 완벽하게 작동합니다. 언제 어디서나 + 게임을 즐길 수 있어요! +

+
+
+ +
+ +

+ 크로스 플랫폼 +

+

+ PC, 태블릿, 스마트폰 등 다양한 디바이스에서 동일한 경험을 + 제공합니다. 어떤 기기에서든 즐겨보세요! +

+
+
+
+
+
+ +
+
+

+ 지금 바로 시작하세요! +

+

+ 친구들과 함께 즐거운 음성 게임의 세계로 빠져보세요. 회원가입 없이 + 바로 시작할 수 있습니다! +

+ +
+
+
+ ); +} diff --git a/fe/src/pages/NotFoundPage/index.tsx b/fe/src/pages/NotFoundPage/index.tsx new file mode 100644 index 0000000..0294a9e --- /dev/null +++ b/fe/src/pages/NotFoundPage/index.tsx @@ -0,0 +1,57 @@ +import { Button } from '@/components/ui/button'; +import { motion } from 'framer-motion'; +import { useEffect } from 'react'; + +export const NotFound = () => { + useEffect(() => { + // NotFound 페이지에서만 스크롤 숨기기 + document.body.style.overflow = 'hidden'; + document.documentElement.style.overflow = 'hidden'; + + // 컴포넌트 언마운트 시 스크롤 복원 + return () => { + document.body.style.overflow = 'auto'; + document.documentElement.style.overflow = 'auto'; + }; + }, []); + + return ( +
+
+
+ +
+ 4 0 4 + + PAGE NOT FOUND + {' '} + {/* 간격 증가 */} +
+
+
+

+ 앗! 방을 찾을 수 없습니다. +

+ + 방이 삭제되었거나 존재하지 않는 방입니다. + + +
+
+ ); +}; diff --git a/fe/src/pages/RoomListPage/RoomDialog/CreateDialog.tsx b/fe/src/pages/RoomListPage/RoomDialog/CreateDialog.tsx index f5eba39..683c8f2 100644 --- a/fe/src/pages/RoomListPage/RoomDialog/CreateDialog.tsx +++ b/fe/src/pages/RoomListPage/RoomDialog/CreateDialog.tsx @@ -11,11 +11,12 @@ import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { useAudioPermission } from '@/hooks/useAudioPermission'; import { useDialogForm } from '@/hooks/useDialogForm'; +import { useFormValidation } from '@/hooks/useFormValidation'; import { gameSocket } from '@/services/gameSocket'; import { signalingSocket } from '@/services/signalingSocket'; import useRoomStore from '@/stores/zustand/useRoomStore'; import { RoomDialogProps } from '@/types/roomTypes'; -import { useState } from 'react'; +import { useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; const CreateDialog = ({ open, onOpenChange }: RoomDialogProps) => { @@ -24,17 +25,43 @@ const CreateDialog = ({ open, onOpenChange }: RoomDialogProps) => { const [hostNickname, setHostNickname] = useState(''); const navigate = useNavigate(); const setCurrentPlayer = useRoomStore((state) => state.setCurrentPlayer); + const { errors, validateForm, updateInput, setErrors, resetForm } = + useFormValidation(); const { requestPermission } = useAudioPermission(); + const isFormValid = + !errors.nickname && + !errors.roomName && + roomName.trim() && + hostNickname.trim(); + + useEffect(() => { + if (!open) { + setRoomName(''); + setHostNickname(''); + setIsLoading(false); + resetForm(); + } + }, [open, setErrors]); const resetAndClose = () => { - setRoomName(''); - setHostNickname(''); - setIsLoading(false); onOpenChange(false); }; + // 입력값 변경 핸들러 + const handleRoomNameChange = (e: React.ChangeEvent) => { + const value = e.target.value; + setRoomName(value); + updateInput('roomName', value); + }; + + const handleNicknameChange = (e: React.ChangeEvent) => { + const value = e.target.value; + setHostNickname(value); + updateInput('nickname', value); + }; + const handleSubmit = async () => { - if (!roomName.trim() || !hostNickname.trim()) return; + if (!validateForm(hostNickname, roomName)) return; try { setIsLoading(true); @@ -62,7 +89,11 @@ const CreateDialog = ({ open, onOpenChange }: RoomDialogProps) => { navigate(`/game/${room.roomId}`); } catch (error) { console.error('시그널링 서버 접속 실패:', error); - alert('음성 채팅 연결에 실패했습니다.'); + alert('[ERROR] 음성 채팅 연결에 실패했습니다.'); + + if (error === 'ValidationFailed') { + console.error('[ERROR] 사용자 입력값 ERROR', error); + } } }); @@ -84,6 +115,7 @@ const CreateDialog = ({ open, onOpenChange }: RoomDialogProps) => { ], onSubmit: handleSubmit, isSubmitDisabled: !roomName.trim() || !hostNickname.trim() || isLoading, + open, }); return ( @@ -106,15 +138,16 @@ const CreateDialog = ({ open, onOpenChange }: RoomDialogProps) => { { - setRoomName(e.target.value); - }} + onChange={handleRoomNameChange} placeholder="방 제목을 입력하세요" className="col-span-3" disabled={isLoading} ref={(el) => (inputRefs.current[0] = el)} onKeyDown={(e) => handleKeyDown(e, 0)} /> + {errors.roomName && ( +

{errors.roomName}

+ )}
@@ -146,7 +180,7 @@ const CreateDialog = ({ open, onOpenChange }: RoomDialogProps) => { diff --git a/fe/src/pages/RoomListPage/RoomDialog/JoinDialog.tsx b/fe/src/pages/RoomListPage/RoomDialog/JoinDialog.tsx index 7763b73..7322507 100644 --- a/fe/src/pages/RoomListPage/RoomDialog/JoinDialog.tsx +++ b/fe/src/pages/RoomListPage/RoomDialog/JoinDialog.tsx @@ -9,8 +9,10 @@ import { } from '@/components/ui/dialog'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; +import { ERROR_CODES, ERROR_MESSAGES } from '@/constants/errors'; import { useAudioPermission } from '@/hooks/useAudioPermission'; import { useDialogForm } from '@/hooks/useDialogForm'; +import { useFormValidation } from '@/hooks/useFormValidation'; import { gameSocket } from '@/services/gameSocket'; import { signalingSocket } from '@/services/signalingSocket'; import { getCurrentRoomQuery } from '@/stores/queries/getCurrentRoomQuery'; @@ -31,39 +33,82 @@ const JoinDialog = ({ open, onOpenChange, roomId }: JoinDialogProps) => { const { data: currentRoom } = getCurrentRoomQuery(roomId); const setCurrentPlayer = useRoomStore((state) => state.setCurrentPlayer); const { requestPermission } = useAudioPermission(); + const { errors, validateForm, updateInput, setErrors, resetForm } = + useFormValidation(); + const isFormValid = !errors.nickname && playerNickname.trim(); - const resetAndClose = () => { + const resetState = () => { setPlayerNickname(''); setIsLoading(false); + resetForm(); + }; + + const handleOpenChange = (isOpen: boolean) => { + if (!isOpen) { + resetState(); + navigate('/rooms'); + } + onOpenChange(isOpen); + }; + + const handleCancel = () => { + resetState(); + navigate('/rooms'); onOpenChange(false); }; + const handleNicknameChange = (e: React.ChangeEvent) => { + const value = e.target.value; + setPlayerNickname(value); + updateInput('nickname', value); + + if (errors.nickname) { + setErrors((prev) => ({ ...prev, nickname: '' })); + } + }; + const handleJoin = async () => { - if (!playerNickname.trim()) return; + if (!validateForm(playerNickname)) return; try { setIsLoading(true); - // 오디오 권한 요청 -> 허용하지 않을 시 입장 불가 - const stream = await requestPermission(); - // 참가자 닉네임 저장 sessionStorage.setItem('user_nickname', playerNickname.trim()); - setCurrentRoom(currentRoom); setCurrentPlayer(playerNickname.trim()); + setCurrentRoom(currentRoom); + // 게임 소켓 입장 시도 gameSocket.connect(); - signalingSocket.connect(); + await gameSocket.joinRoom(roomId, playerNickname.trim()); + + // 오디오 권한 요청 + const stream = await requestPermission(); // 스트림 생성 후 방 입장 + signalingSocket.connect(); await signalingSocket.setupLocalStream(stream); await signalingSocket.joinRoom(currentRoom, playerNickname.trim()); - gameSocket.joinRoom(roomId, playerNickname.trim()); - resetAndClose(); + // 성공시 게임방으로 이동 + onOpenChange(false); navigate(`/game/${roomId}`); } catch (error) { - console.error('방 입장 실패:', error); + if (error === ERROR_CODES.duplicatedNickname) { + setErrors((prev) => ({ + ...prev, + nickname: ERROR_MESSAGES.duplicatedNickname, + })); + // 닉네임 중복 에러의 경우 홈 리다이렉션하지 않음 + gameSocket.disconnect(); + signalingSocket.disconnect(); + } else { + // 다른 에러의 경우 방 목록 페이지로 리다이렉션 + console.error('방 입장 실패:', error); + gameSocket.disconnect(); + signalingSocket.disconnect(); + navigate('/rooms'); + } } finally { setIsLoading(false); } @@ -80,10 +125,11 @@ const JoinDialog = ({ open, onOpenChange, roomId }: JoinDialogProps) => { ], onSubmit: handleJoin, isSubmitDisabled: !playerNickname.trim() || isLoading, + open, }); return ( - + 방 입장하기 @@ -100,20 +146,23 @@ const JoinDialog = ({ open, onOpenChange, roomId }: JoinDialogProps) => { setPlayerNickname(e.target.value)} + onChange={handleNicknameChange} placeholder="닉네임을 입력하세요" className="col-span-3" disabled={isLoading} ref={(el) => (inputRefs.current[0] = el)} onKeyDown={(e) => handleKeyDown(e, 0)} /> + {errors.nickname && ( +

{errors.nickname}

+ )}
diff --git a/fe/src/pages/RoomListPage/RoomHeader/RoomHeader.tsx b/fe/src/pages/RoomListPage/RoomHeader/RoomHeader.tsx index b47fbae..da8c2e7 100644 --- a/fe/src/pages/RoomListPage/RoomHeader/RoomHeader.tsx +++ b/fe/src/pages/RoomListPage/RoomHeader/RoomHeader.tsx @@ -1,6 +1,6 @@ import { Button } from '@/components/ui/button'; import { useState } from 'react'; -import RoomDialog from '../RoomDialog/CreateDialog'; +import CreateDialog from '../RoomDialog/CreateDialog'; const RoomHeader = () => { const [isDialogOpen, setIsDialogOpen] = useState(false); @@ -12,13 +12,13 @@ const RoomHeader = () => { return ( <>
- 방 목록 -
- + ); }; diff --git a/fe/src/pages/RoomListPage/RoomList/GameRoom.tsx b/fe/src/pages/RoomListPage/RoomList/GameRoom.tsx index 7efca1c..09a13ea 100644 --- a/fe/src/pages/RoomListPage/RoomList/GameRoom.tsx +++ b/fe/src/pages/RoomListPage/RoomList/GameRoom.tsx @@ -39,13 +39,13 @@ const GameRoom = ({ room, onJoinRoom }: GameRoomProps) => {
상태:{' '} {isGameStarted(room.status) ? '게임 중' : '대기 중'} diff --git a/fe/src/pages/RoomListPage/RoomList/Pagination.tsx b/fe/src/pages/RoomListPage/RoomList/Pagination.tsx index 1fa9032..6d2639c 100644 --- a/fe/src/pages/RoomListPage/RoomList/Pagination.tsx +++ b/fe/src/pages/RoomListPage/RoomList/Pagination.tsx @@ -1,24 +1,30 @@ import { Button } from '@/components/ui/button'; +import { getRoomsQuery } from '@/stores/queries/getRoomsQuery'; +import useRoomStore from '@/stores/zustand/useRoomStore'; +import { useEffect } from 'react'; import { FaChevronLeft, FaChevronRight } from 'react-icons/fa6'; -interface PaginationProps { - currentPage: number; - totalPages: number; - onPageChange: (page: number) => void; -} +const Pagination = () => { + const { pagination, setUserPage } = useRoomStore(); + const userPage = useRoomStore((state) => state.userPage); + const { totalPages } = pagination; + const { refetch } = getRoomsQuery(userPage); + + useEffect(() => { + refetch(); + }, [userPage, refetch]); + + const handlePageChange = async (newPage: number) => { + setUserPage(newPage); + }; -const Pagination = ({ - currentPage, - totalPages, - onPageChange, -}: PaginationProps) => { return (
@@ -26,9 +32,9 @@ const Pagination = ({ {Array.from({ length: totalPages }, (_, i) => ( diff --git a/fe/src/pages/RoomListPage/RoomList/RoomList.tsx b/fe/src/pages/RoomListPage/RoomList/RoomList.tsx index 3a6886a..9ee0270 100644 --- a/fe/src/pages/RoomListPage/RoomList/RoomList.tsx +++ b/fe/src/pages/RoomListPage/RoomList/RoomList.tsx @@ -1,22 +1,26 @@ import GameRoom from './GameRoom'; import Pagination from './Pagination'; -import { usePagination } from '@/hooks/usePagination'; import { RULES } from '@/constants/rules'; -import { useState } from 'react'; +import { useEffect, useState } from 'react'; import JoinDialog from '../RoomDialog/JoinDialog'; +import useRoomStore from '@/stores/zustand/useRoomStore'; const RoomList = () => { - const { - currentPage, - setCurrentPage, - totalPages, - currentRooms, - isEmpty, - showPagination, - } = usePagination(); - + const rooms = useRoomStore((state) => state.rooms); + const pagination = useRoomStore((state) => state.pagination); const [isJoinDialogOpen, setIsJoinDialogOpen] = useState(false); const [selectedRoomId, setSelectedRoomId] = useState(null); + const [showPagination, setShowPagination] = useState(false); + + useEffect(() => { + if (pagination?.totalPages > 1) { + setShowPagination(true); + } + + if (pagination?.totalPages === 1) { + setShowPagination(false); + } + }, [pagination]); const onJoinRoom = (roomId: string) => { setSelectedRoomId(roomId); @@ -26,29 +30,17 @@ const RoomList = () => { return (
- {currentRooms.map((room) => ( + {rooms.map((room) => ( ))} - {currentRooms.length > 0 && - currentRooms.length < RULES.maxPage && - Array.from({ length: RULES.maxPage - currentRooms.length }).map( - (_, i) =>
- )} + {rooms.length > 0 && + rooms.length < RULES.maxPage && + Array.from({ length: RULES.maxPage - rooms.length }).map((_, i) => ( +
+ ))}
- {showPagination && ( - - )} - - {isEmpty && ( -
- 생성된 방이 없습니다. -
- )} + {showPagination && } {selectedRoomId && ( { const [showAlert, setShowAlert] = useState(false); - const [kickedRoomName, setKickedRoomName] = useState(''); + const [alertMessage, setAlertMessage] = useState(''); + const { rooms } = useRoomStore(); + const isEmpty = rooms.length === 0; useRoomsSSE(); useEffect(() => { const kickedRoomName = sessionStorage.getItem('kickedRoomName'); + // 강퇴 처리 if (kickedRoomName) { - setKickedRoomName(kickedRoomName); + setAlertMessage(`${kickedRoomName}방에서 강퇴되었습니다.`); setShowAlert(true); sessionStorage.removeItem('kickedRoomName'); } + + // 게임 중 입장 에러 + const gameInProgressError = sessionStorage.getItem('gameInProgressError'); + + if (gameInProgressError) { + setAlertMessage('게임이 진행 중인 방에는 입장할 수 없습니다.'); + setShowAlert(true); + sessionStorage.removeItem('gameInProgressError'); + } }, []); return ( -
- - - +
+
+ + + {isEmpty ? ( +
+ 생성된 방이 없습니다. 게임방을 만들어 주세요. +
+ ) : ( + + )} +
+
); diff --git a/fe/src/services/gameSocket.ts b/fe/src/services/gameSocket.ts index b3fceb7..e39cdb5 100644 --- a/fe/src/services/gameSocket.ts +++ b/fe/src/services/gameSocket.ts @@ -79,7 +79,7 @@ class GameSocket extends SocketService { setCurrentRoom(null); setCurrentPlayer(null); - window.location.href = '/'; + window.location.href = '/rooms'; return; } @@ -112,7 +112,19 @@ class GameSocket extends SocketService { } joinRoom(roomId: string, playerNickname: string) { - this.socket?.emit('joinRoom', { roomId, playerNickname }); + return new Promise((resolve, reject) => { + // error 한번만 체크하는 이벤트 리스너 + this.socket?.once('error', (error) => { + reject(error); + }); + + // updateUsers가 오면 성공으로 처리 + this.socket?.once('updateUsers', () => { + resolve(true); + }); + + this.socket?.emit('joinRoom', { roomId, playerNickname }); + }); } kickPlayer(playerNickname: string) { diff --git a/fe/src/stores/queries/getRoomsQuery.ts b/fe/src/stores/queries/getRoomsQuery.ts index 38da935..8930c1b 100644 --- a/fe/src/stores/queries/getRoomsQuery.ts +++ b/fe/src/stores/queries/getRoomsQuery.ts @@ -1,6 +1,6 @@ import { useQuery } from '@tanstack/react-query'; import axios from 'axios'; -import { Room } from '@/types/roomTypes'; +import { PaginatedResponse, Room } from '@/types/roomTypes'; import { ENV } from '@/config/env'; const gameAPI = axios.create({ @@ -9,12 +9,15 @@ const gameAPI = axios.create({ withCredentials: false, }); -export const getRoomsQuery = () => { +export const getRoomsQuery = (currentPage: number) => { return useQuery({ queryKey: ['rooms'], queryFn: async () => { - const response = await gameAPI.get('/api/rooms'); - return response.data; + const { data } = await gameAPI.get>( + `/api/rooms?page=${currentPage}` + ); + + return data; }, }); }; diff --git a/fe/src/stores/zustand/useGameStore.ts b/fe/src/stores/zustand/useGameStore.ts index 3032c67..93e7249 100644 --- a/fe/src/stores/zustand/useGameStore.ts +++ b/fe/src/stores/zustand/useGameStore.ts @@ -7,7 +7,7 @@ interface GameStore { resultData: GameResultProps; muteStatus: MuteStatus; rank: string[]; - isGameStarted: boolean; + gameInProgressError: boolean; } interface GameActions { @@ -15,7 +15,7 @@ interface GameActions { setGameResult: (resultData: GameResultProps) => void; setMuteStatus: (muteStatus: MuteStatus) => void; setRank: (rank: string[]) => void; - setIsGameStarted: (isGameStarted: boolean) => void; + setGameInProgressError: (value: boolean) => void; resetGame: () => void; } @@ -23,8 +23,8 @@ const initialState: GameStore = { turnData: null, resultData: null, muteStatus: {}, - isGameStarted: false, rank: [], + gameInProgressError: false, }; const useGameStore = create()( @@ -41,13 +41,11 @@ const useGameStore = create()( resultData, })), - setIsGameStarted: (isGameStarted) => - set(() => ({ - isGameStarted, - })), - setRank: (rank) => set(() => ({ rank })), + setGameInProgressError: (gameInProgressError) => + set({ gameInProgressError }), + resetGame: () => set({ // 초기화 로직 diff --git a/fe/src/stores/zustand/useRoomStore.ts b/fe/src/stores/zustand/useRoomStore.ts index ba4cbf4..36c82aa 100644 --- a/fe/src/stores/zustand/useRoomStore.ts +++ b/fe/src/stores/zustand/useRoomStore.ts @@ -1,4 +1,4 @@ -import { Room } from '@/types/roomTypes'; +import { PaginationData, Room } from '@/types/roomTypes'; import { create } from 'zustand'; import { devtools } from 'zustand/middleware'; @@ -7,6 +7,8 @@ interface RoomStore { currentRoom: Room | null; currentPlayer: string | null; kickedPlayer: string | null; + pagination: PaginationData | null; + userPage: number; } interface RoomActions { @@ -14,13 +16,17 @@ interface RoomActions { setCurrentRoom: (room: Room) => void; setCurrentPlayer: (nickname: string) => void; setKickedPlayer: (nickname: string) => void; + setPagination: (pagination: PaginationData) => void; + setUserPage: (userPage: number) => void; } const initialState: RoomStore = { rooms: [], currentRoom: null, - currentPlayer: null, - kickedPlayer: null, + currentPlayer: '', + kickedPlayer: '', + pagination: null, + userPage: 0, }; const useRoomStore = create()( @@ -46,6 +52,17 @@ const useRoomStore = create()( set(() => ({ kickedPlayer: nickname, })), + + setPagination: (pagination) => + set(() => ({ + pagination, + })), + + setUserPage: (userPage) => { + set(() => ({ + userPage, + })); + }, })) ); diff --git a/fe/src/types/roomTypes.ts b/fe/src/types/roomTypes.ts index 8f7e9c6..99a424f 100644 --- a/fe/src/types/roomTypes.ts +++ b/fe/src/types/roomTypes.ts @@ -1,6 +1,8 @@ export interface PlayerProps { playerNickname: string; isReady: boolean; + isDead: boolean; + isLeft: boolean; } export interface Room { @@ -15,3 +17,16 @@ export interface RoomDialogProps { open: boolean; onOpenChange: (open: boolean) => void; } + +export interface PaginationData { + currentPage: number; + totalPages: number; + totalItems: number; + hasNextPage: boolean; + hasPreviousPage: boolean; +} + +export interface PaginatedResponse { + rooms: T[]; + pagination: PaginationData; +} diff --git a/fe/src/types/socketTypes.ts b/fe/src/types/socketTypes.ts index 784683e..c222ebe 100644 --- a/fe/src/types/socketTypes.ts +++ b/fe/src/types/socketTypes.ts @@ -34,6 +34,8 @@ export interface TurnData { export interface GameResultProps { playerNickname: string; result: string; + note?: string; + pronounceScore?: number; } export type MuteStatus = { diff --git a/fe/src/utils/validator.ts b/fe/src/utils/validator.ts new file mode 100644 index 0000000..28ece0c --- /dev/null +++ b/fe/src/utils/validator.ts @@ -0,0 +1,37 @@ +import { ERROR_MESSAGES } from '@/constants/errors'; + +export const validateNickname = (nickname: string): string => { + const trimmed = nickname.trim(); + const regex = /^[a-zA-Z0-9가-힣ㄱ-ㅎㅏ-ㅣ ]+$/; + let error = ''; + + switch (true) { + case !trimmed: + error = ERROR_MESSAGES.emptyNickname; + break; + case !regex.test(trimmed): + error = ERROR_MESSAGES.invalidNickname; + break; + case trimmed.length < 2 || trimmed.length > 8: + error = ERROR_MESSAGES.nicknameLength; + break; + } + + return error; +}; + +export const validateRoomName = (roomName: string): string => { + const trimmed = roomName.trim(); + let error = ''; + + switch (true) { + case !trimmed: + error = ERROR_MESSAGES.emptyRoomName; + break; + case trimmed.length < 2 || trimmed.length > 12: + error = ERROR_MESSAGES.roomNameLength; + break; + } + + return error; +}; diff --git a/fe/tailwind.config.js b/fe/tailwind.config.js index b0d4be2..19d70fe 100644 --- a/fe/tailwind.config.js +++ b/fe/tailwind.config.js @@ -4,11 +4,17 @@ export default { content: ['./index.html', './src/**/*.{ts,tsx,js,jsx}'], theme: { extend: { + backgroundImage: { + 'main-desert': 'url(https://i.imgur.com/RMCkgEF.png)', + }, + fontFamily: { galmuri: ['Galmuri11', 'monospace'], galmuri9: ['Galmuri9', 'monospace'], galmuri14: ['Galmuri14', 'monospace'], + pretendard: ['Pretendard', 'sans-serif'], }, + fontSize: { 'galmuri-20': ['20px'], }, @@ -18,7 +24,15 @@ export default { md: 'calc(var(--radius) - 2px)', sm: 'calc(var(--radius) - 4px)', }, + colors: { + brand: { + main: '#74D7C1', + navy: '#02032F', + gold: '#FFB400', + mint: '#13E7EF', + }, + background: 'hsl(var(--background))', foreground: 'hsl(var(--foreground))', card: {