UNPKG

bytefun-ai-mcp

Version:

ByteFun AI MCP服务 - 打通产品设计、UI设计、代码开发的服务平台,支持设计稿转代码和跨平台原生代码开发

96 lines (89 loc) 23.3 kB
export const uiDesignPromptTemplate = `# 1、UI设计要求 - **必须遵循'UI设计规范.md'的UI设计规范来定义颜色、样式、字体、布局等** - 遵循iPhone 16 Pro尺寸规格(宽度393px高度852px) - 采用明亮、活力的配色方案 - 如用户没有明确描述说明页面背景色,只有闪屏页面的背景色允许设置primary主色或primary与secondary的渐变色,其他页面必须使用非primary与非secondary的纯色做页面背景色,比如一般使用白色系,如果是暗黑风那就是黑色系。 - hover与点击反馈:请使用浅色的背景色background来反馈就行,严禁使用transform效果,如不得使用: .hot-sales-item:hover { transform: translateX(...px); } 正确写法应该是: .hot-sales-item:hover { background: ...; } - 输入框\`input\`如果需要展示文字label,尽量使用icon代替文字label,并且icon重叠在输入框的左侧,这样整个页面的空间利用率高。 - 顶部导航栏左边的返回按钮必须使用\`icon\`图标组件来实现,不得使用\`text\`和\`button\`组件来实现。 - 页面内容显示区里面的孩子节点禁止使用overflow、overflow-x、overflow-y属性。 - 手机状态栏phoneTopStatusBar节点的高度必须永远设计为22px,必须设置height、min-height、max-height属性和值是22px,css代码如下: \`\`\`css ... height: 22px; min-height: 22px; max-height: 22px; ... \`\`\` - 因为页面开启了底部沉浸式,所以\`bottomTabContentContainer\`节点必须设置padding-bottom属性,值为22px # 2、icon图标与img图片写法和规则 - 当需要icon图标时必须使用FontAwesome图标,比如:\`<i name="微信Icon" vtype="icon" id="wxIcon" class="fab fa-weixin"></i>\` - 当需要img图片时,src使用图片地址:\`https://oss.bytefungo.com/f1/showImg1.jpg\`),其中结尾的’showImg1'可以换为从1到30的数字,1~30的数字必须随机挑选,不得每个页面每个图片都使用同一个数字。写法比如:\`<img src="https://oss.bytefungo.com/f1/showImg17.jpg" alt="xxx" class="xxx" vtype="image">\` - 绝对不能使用emoji表情符号,不得使用任何emoji表情符号,请使用icon或img图片节点来代替。 - 需要严格遵守\`UI设计规范.md\`的UI设计规范里面的\`图标规范\`来设计icon图标。 # 3、html节点规则 - 每个组件都必须包含:id、name、vtype属性 - id属性必须是英文或数字,且不能以数字开头,并且整个页面id属性的值必须唯一 - name属性必须是中文或数字,并且不能包含特殊字符 - vtype属性的值必须是\`组件类型枚举 (vtype)\` 中的一个 - 手机状态栏phoneTopStatusBar节点的高度必须设计为22px,写死:height: 22px - 所有css样式定义只能使用以下这些css伪类选择器:hover、active、focus、disabled、checked、selected、placeholder - 节点如果设置了padding、padding-top、padding-bottom、padding-left、padding-right属性,那么必须设置box-sizing: border-box; - 禁止写css动画的代码,这是UI设计稿,不需要动画,不得使用animation、@keyframes、transform、transition等任何动画相关的css属性。 - 禁止使用rem和em等其他,像素必须使用px - 禁止写任何@media相关的(响应式调整)css代码,因为已经明确是以393*852的分辨率设计APP移动端了 - vtype="switch"、vtype="radio"、vtype="checkBox"节点的孩子i标签节点必须添加一个checkedClass属性,用于表示选中状态的icon图标样式类名,比如: \`\`\` html <div vtype="radio" id="xxxRadio" name="xxx单选"> <i name="单选Icon" vtype="icon" id="xxxRadioIcon" class="fa xxx" checkedClass="fa yyy"></i> </div> \`\`\` # 4、高级节点结构正确性和使用场景 - \`subPage\`节点绝对不能有孩子节点,像首页的子页面\`subPage\`节点空内容就行,不能有任何孩子节点。 - 一个\`dialogOverlay\`节点必须只能包含一个\`dialog\`节点,并且\`dialog\`节点必须是\`dialogOverlay\`节点的唯一孩子节点,\`dialog\`节点相对\`dialogOverlay\`节点必须居中展示,\`dialog\`的css代码如下: \`\`\`css ... position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); ... \`\`\` - \`inlineBlockAndWrap\`节点必须包含N个\`blockItem\`节点,使用场景:当需要展示多个节点横排,并且这些节点宽度不固定,当父亲容器该行显示不下需要自动换行布局时,比如:多个标签tag、热门搜索tag、商品tag等等标签tag类场景。 - \`multiStateContainer\`节点必须包含N个\`oneStateContentContainer\`节点,使用场景:当需要展示多个不同状态的内容时,比如:登录状态下展示个人信息内容,未登录状态下展示登录注册内容。 - \`radioGroup\`节点必须包含多个\`radio\`节点,使用场景:单选组,比如:性别选择、支付方式选择等。 - \`checkBoxGroup\`节点必须包含多个\`checkBox\`节点,使用场景:多选组,比如:选择购物车商品、选择商品规格等。 - \`verticalListView\`、\`horizontalListView\`节点必须包含N个\`listItemCard\`节点,使用场景:当需要展示多个相同样式的item节点竖排或横排时,比如:热门商品列表、推荐商品列表、xxx列表。 - \`viewPager\`节点必须多个\`oneViewPagerContent\`节点,并且必须要有一个\`viewPagerIndicatorContainer\`节点与\`viewPager\`节点作为兄弟节点,\`viewPagerIndicatorContainer\`节点必须包含着多个\`rect\`或\`circle\`组件,其中\`rect\`或\`circle\`组件不允许添加孩子,\`rect\`或\`circle\`节点就是指示器的圆点, 注意轮播指示器的\`rect\`或\`circle\`节点个数要和\`oneViewPagerContent\`节点的个数一样,并且每一个\`oneViewPagerContent\`节点的内容绝对不可以省略,必须设计真实完整内容,使用场景:当需要展示多个轮播项时,比如:广告轮播、商品轮播等。 - \`tabContainer\`节点必须包含N个\`oneTabContentContainer\`节点,并且必须要有一个\`tabMenuBar\`节点与\`tabContainer\`节点作为兄弟节点,其中\`tabMenuBar\`节点必须包含N个\`tabMenuBarItem\`节点,每一个\`oneTabContentContainer\`节点的内容绝对不可以省略,必须设计真实完整的\`oneTabContentContainer\`节点内容,使用场景:当需要展示多个标签页时,比如:历史和收藏的tab标签页等。 - \`bottomTabContentContainer\`节点必须包含N个\`subPage\`节点,并且必须要有一个\`bottomTabNavigateBar\`节点与\`bottomTabContentContainer\`节点作为兄弟节点,\`bottomTabContentContainer\`节点的width和height必须设计为100%,其中\`bottomTabNavigateBar\`节点必须包含N个\`bottomTabNavigateBarItem\`节点,使用场景:当需要展示多个底部导航项时,比如:首页、分类、购物车、我的等底部导航项。 # 5、数据获取方式\`fromApiOrCacheData: true\`的设置条件: - vtype必须是\`verticalListView\`、\`horizontalListView\`、\`viewPager\`、\`tabContainer\`、\`radioGroup\`、\`checkBoxGroup\`、\`inlineBlockAndWrap\`类型的组件 - 该组件的数据是从网络或者本地持久化缓存拉取回来的,比如:热门商品列表组件\`verticalListView\`,该组件的数据是从网络或者本地持久化缓存拉取回来的 - 如果是一些不需要后端API联网或本地持久化缓存拉取获取的静态写死的数据,那么就不需要fromApiOrCacheData属性了,比如:个人中心列表项、设置列表项、菜单列表项,这些根本不需要经过后台API联网或本地持久化缓存拉取获取的,那么就不要fromApiOrCacheData属性 # 6、节点显示隐藏规则 - \`oneStateContentContainer\`、\`oneViewPagerContent\`、\`oneTabContentContainer\`节点显示与隐藏的切换必须使用\`display: none\`来实现,不能使用\`opacity: 0\`和\`visibility: hidden\`来实现 # 7、必须添加节点显示和隐藏的切换js方法 - 如果一个节点需要显示和隐藏的切换,那么就必须添加一个js方法来实现显示和隐藏的切换,js方法的命名规则:\`switchTo\` + 节点id,并且该js方法不得带有任何参数。 - js方法的命名规则:\`switchTo\` + 节点id,比如:\`switchToAgeContainer\`、\`switchToPhoneContainer\` - 切换显示和隐藏的js方法不得带有任何参数,比如:\`switchToAgeContainer()\`、\`switchToPhoneContainer()\` # 8、组件类型枚举 (vtype) - 基础: \`text\`, \`button\`, \`textButton\`, \`iconButton\`, \`icon\`, \`image\`, \`rect\`, \`circle\`, \`line\`, \`container\` - 布局: \`multiStateContainer\`, \`oneStateContentContainer\`, \`inlineBlockAndWrap\`, \`blockItem\`, \`verticalLinearLayout\`, \`horizontalLinearLayout\` - 表单: \`input\`, \`switch\`, \`radio\`, \`checkBox\`, \`radioGroup\`, \`checkBoxGroup\` - 列表: \`verticalListView\`, \`horizontalListView\`, \`listItemCard\` - 轮播:\`viewPager\`, \`oneViewPagerContent\`, \`viewPagerIndicatorContainer\` - tab:\`tabContainer\`, \`oneTabContentContainer\`, \`tabMenuBar\`, \`tabMenuBarItem\` - 底部导航: \`bottomTabContentContainer\`, \`subPage\`, \`bottomTabNavigateBar\`, \`bottomTabNavigateBarItem\` - 操作栏:\`topNavigateBar\`, \`bottomOperateBar\` - 弹窗: \`dialog\`, \`dialogOverlay\`, \`toast\`, \`dropDownMenu\`, \`sideSlidePanel\` - 系统顶部状态栏: \`phoneTopStatusBar\` `; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlEZXNpZ24wMC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91aURlc2lnbjAwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBOEZyQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHVpRGVzaWduUHJvbXB0VGVtcGxhdGUgPSBgIyAx44CBVUnorr7orqHopoHmsYJcbi0gKirlv4XpobvpgbXlvqonVUnorr7orqHop4TojIMubWQn55qEVUnorr7orqHop4TojIPmnaXlrprkuYnpopzoibLjgIHmoLflvI/jgIHlrZfkvZPjgIHluIPlsYDnrYkqKlxuLSDpgbXlvqppUGhvbmUgMTYgUHJv5bC65a+46KeE5qC8KOWuveW6pjM5M3B46auY5bqmODUycHgpXG4tIOmHh+eUqOaYjuS6ruOAgea0u+WKm+eahOmFjeiJsuaWueahiFxuLSDlpoLnlKjmiLfmsqHmnInmmI7noa7mj4/ov7Dor7TmmI7pobXpnaLog4zmma/oibLvvIzlj6rmnInpl6rlsY/pobXpnaLnmoTog4zmma/oibLlhYHorrjorr7nva5wcmltYXJ55Li76Imy5oiWcHJpbWFyeeS4jnNlY29uZGFyeeeahOa4kOWPmOiJsu+8jOWFtuS7lumhtemdouW/hemhu+S9v+eUqOmdnnByaW1hcnnkuI7pnZ5zZWNvbmRhcnnnmoTnuq/oibLlgZrpobXpnaLog4zmma/oibLvvIzmr5TlpoLkuIDoiKzkvb/nlKjnmb3oibLns7vvvIzlpoLmnpzmmK/mmpfpu5Hpo47pgqPlsLHmmK/pu5HoibLns7vjgIJcbi0gaG92ZXLkuI7ngrnlh7vlj43ppojvvJror7fkvb/nlKjmtYXoibLnmoTog4zmma/oibJiYWNrZ3JvdW5k5p2l5Y+N6aaI5bCx6KGM77yM5Lil56aB5L2/55SodHJhbnNmb3Jt5pWI5p6c77yM5aaC5LiN5b6X5L2/55So77yaIFxuICAgIC5ob3Qtc2FsZXMtaXRlbTpob3ZlciB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCguLi5weCk7XG4gICAgfVxuICAgIOato+ehruWGmeazleW6lOivpeaYr++8mlxuICAgIC5ob3Qtc2FsZXMtaXRlbTpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IC4uLjtcbiAgICB9XG4tIOi+k+WFpeahhlxcYGlucHV0XFxg5aaC5p6c6ZyA6KaB5bGV56S65paH5a2XbGFiZWzvvIzlsL3ph4/kvb/nlKhpY29u5Luj5pu/5paH5a2XbGFiZWzvvIzlubbkuJRpY29u6YeN5Y+g5Zyo6L6T5YWl5qGG55qE5bem5L6n77yM6L+Z5qC35pW05Liq6aG16Z2i55qE56m66Ze05Yip55So546H6auY44CCXG4tIOmhtumDqOWvvOiIquagj+W3pui+ueeahOi/lOWbnuaMiemSruW/hemhu+S9v+eUqFxcYGljb25cXGDlm77moIfnu4Tku7bmnaXlrp7njrDvvIzkuI3lvpfkvb/nlKhcXGB0ZXh0XFxg5ZKMXFxgYnV0dG9uXFxg57uE5Lu25p2l5a6e546w44CCXG4tIOmhtemdouWGheWuueaYvuekuuWMuumHjOmdoueahOWtqeWtkOiKgueCueemgeatouS9v+eUqG92ZXJmbG9344CBb3ZlcmZsb3cteOOAgW92ZXJmbG93LXnlsZ7mgKfjgIJcbi0g5omL5py654q25oCB5qCPcGhvbmVUb3BTdGF0dXNCYXLoioLngrnnmoTpq5jluqblv4XpobvmsLjov5zorr7orqHkuLoyMnB477yM5b+F6aG76K6+572uaGVpZ2h044CBbWluLWhlaWdodOOAgW1heC1oZWlnaHTlsZ7mgKflkozlgLzmmK8yMnB477yMY3Nz5Luj56CB5aaC5LiL77yaXG5cXGBcXGBcXGBjc3Ncbi4uLlxuaGVpZ2h0OiAyMnB4O1xubWluLWhlaWdodDogMjJweDtcbm1heC1oZWlnaHQ6IDIycHg7XG4uLi5cblxcYFxcYFxcYFxuLSDlm6DkuLrpobXpnaLlvIDlkK/kuoblupXpg6jmsonmtbjlvI/vvIzmiYDku6VcXGBib3R0b21UYWJDb250ZW50Q29udGFpbmVyXFxg6IqC54K55b+F6aG76K6+572ucGFkZGluZy1ib3R0b23lsZ7mgKfvvIzlgLzkuLoyMnB4XG5cbiMgMuOAgWljb27lm77moIfkuI5pbWflm77niYflhpnms5Xlkozop4TliJlcbi0g5b2T6ZyA6KaBaWNvbuWbvuagh+aXtuW/hemhu+S9v+eUqEZvbnRBd2Vzb21l5Zu+5qCH77yM5q+U5aaC77yaXFxgPGkgbmFtZT1cIuW+ruS/oUljb25cIiB2dHlwZT1cImljb25cIiBpZD1cInd4SWNvblwiIGNsYXNzPVwiZmFiIGZhLXdlaXhpblwiPjwvaT5cXGBcbi0g5b2T6ZyA6KaBaW1n5Zu+54mH5pe277yMc3Jj5L2/55So5Zu+54mH5Zyw5Z2A77yaXFxgaHR0cHM6Ly9vc3MuYnl0ZWZ1bmdvLmNvbS9mMS9zaG93SW1nMS5qcGdcXGAp77yM5YW25Lit57uT5bC+55qE4oCZc2hvd0ltZzEn5Y+v5Lul5o2i5Li65LuOMeWIsDMw55qE5pWw5a2X77yMMX4zMOeahOaVsOWtl+W/hemhu+maj+acuuaMkemAie+8jOS4jeW+l+avj+S4qumhtemdouavj+S4quWbvueJh+mDveS9v+eUqOWQjOS4gOS4quaVsOWtl+OAguWGmeazleavlOWmgu+8mlxcYDxpbWcgc3JjPVwiaHR0cHM6Ly9vc3MuYnl0ZWZ1bmdvLmNvbS9mMS9zaG93SW1nMTcuanBnXCIgYWx0PVwieHh4XCIgY2xhc3M9XCJ4eHhcIiB2dHlwZT1cImltYWdlXCI+XFxgXG4tIOe7neWvueS4jeiDveS9v+eUqGVtb2pp6KGo5oOF56ym5Y+377yM5LiN5b6X5L2/55So5Lu75L2VZW1vamnooajmg4XnrKblj7fvvIzor7fkvb/nlKhpY29u5oiWaW1n5Zu+54mH6IqC54K55p2l5Luj5pu/44CCXG4tIOmcgOimgeS4peagvOmBteWuiFxcYFVJ6K6+6K6h6KeE6IyDLm1kXFxg55qEVUnorr7orqHop4TojIPph4zpnaLnmoRcXGDlm77moIfop4TojINcXGDmnaXorr7orqFpY29u5Zu+5qCH44CCXG5cbiMgM+OAgWh0bWzoioLngrnop4TliJlcbi0g5q+P5Liq57uE5Lu26YO95b+F6aG75YyF5ZCr77yaaWTjgIFuYW1l44CBdnR5cGXlsZ7mgKdcbi0gaWTlsZ7mgKflv4XpobvmmK/oi7HmlofmiJbmlbDlrZfvvIzkuJTkuI3og73ku6XmlbDlrZflvIDlpLTvvIzlubbkuJTmlbTkuKrpobXpnaJpZOWxnuaAp+eahOWAvOW/hemhu+WUr+S4gFxuLSBuYW1l5bGe5oCn5b+F6aG75piv5Lit5paH5oiW5pWw5a2X77yM5bm25LiU5LiN6IO95YyF5ZCr54m55q6K5a2X56ymXG4tIHZ0eXBl5bGe5oCn55qE5YC85b+F6aG75pivXFxg57uE5Lu257G75Z6L5p6a5Li+ICh2dHlwZSlcXGAg5Lit55qE5LiA5LiqXG4tIOaJi+acuueKtuaAgeagj3Bob25lVG9wU3RhdHVzQmFy6IqC54K555qE6auY5bqm5b+F6aG76K6+6K6h5Li6MjJweO+8jOWGmeatu++8mmhlaWdodDogMjJweFxuLSDmiYDmnIljc3PmoLflvI/lrprkuYnlj6rog73kvb/nlKjku6XkuIvov5nkuptjc3PkvKrnsbvpgInmi6nlmajvvJpob3ZlcuOAgWFjdGl2ZeOAgWZvY3Vz44CBZGlzYWJsZWTjgIFjaGVja2Vk44CBc2VsZWN0ZWTjgIFwbGFjZWhvbGRlclxuLSDoioLngrnlpoLmnpzorr7nva7kuoZwYWRkaW5n44CBcGFkZGluZy10b3DjgIFwYWRkaW5nLWJvdHRvbeOAgXBhZGRpbmctbGVmdOOAgXBhZGRpbmctcmlnaHTlsZ7mgKfvvIzpgqPkuYjlv4Xpobvorr7nva5ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuLSDnpoHmraLlhpljc3PliqjnlLvnmoTku6PnoIHvvIzov5nmmK9VSeiuvuiuoeeov++8jOS4jemcgOimgeWKqOeUu++8jOS4jeW+l+S9v+eUqGFuaW1hdGlvbuOAgUBrZXlmcmFtZXPjgIF0cmFuc2Zvcm3jgIF0cmFuc2l0aW9u562J5Lu75L2V5Yqo55S755u45YWz55qEY3Nz5bGe5oCn44CCXG4tIOemgeatouS9v+eUqHJlbeWSjGVt562J5YW25LuW77yM5YOP57Sg5b+F6aG75L2/55SocHhcbi0g56aB5q2i5YaZ5Lu75L2VQG1lZGlh55u45YWz55qEKOWTjeW6lOW8j+iwg+aVtCljc3Pku6PnoIHvvIzlm6DkuLrlt7Lnu4/mmI7noa7mmK/ku6UzOTMqODUy55qE5YiG6L6o546H6K6+6K6hQVBQ56e75Yqo56uv5LqGXG4tIHZ0eXBlPVwic3dpdGNoXCLjgIF2dHlwZT1cInJhZGlvXCLjgIF2dHlwZT1cImNoZWNrQm94XCLoioLngrnnmoTlranlrZBp5qCH562+6IqC54K55b+F6aG75re75Yqg5LiA5LiqY2hlY2tlZENsYXNz5bGe5oCn77yM55So5LqO6KGo56S66YCJ5Lit54q25oCB55qEaWNvbuWbvuagh+agt+W8j+exu+WQje+8jOavlOWmgu+8mlxuXFxgXFxgXFxgIGh0bWxcbjxkaXYgdnR5cGU9XCJyYWRpb1wiIGlkPVwieHh4UmFkaW9cIiBuYW1lPVwieHh45Y2V6YCJXCI+XG4gICAgPGkgbmFtZT1cIuWNlemAiUljb25cIiB2dHlwZT1cImljb25cIiBpZD1cInh4eFJhZGlvSWNvblwiIGNsYXNzPVwiZmEgeHh4XCIgY2hlY2tlZENsYXNzPVwiZmEgeXl5XCI+PC9pPlxuPC9kaXY+XG5cXGBcXGBcXGBcblxuIyA044CB6auY57qn6IqC54K557uT5p6E5q2j56Gu5oCn5ZKM5L2/55So5Zy65pmvXG4tIFxcYHN1YlBhZ2VcXGDoioLngrnnu53lr7nkuI3og73mnInlranlrZDoioLngrnvvIzlg4/pppbpobXnmoTlrZDpobXpnaJcXGBzdWJQYWdlXFxg6IqC54K556m65YaF5a655bCx6KGM77yM5LiN6IO95pyJ5Lu75L2V5a2p5a2Q6IqC54K544CCXG4tIOS4gOS4qlxcYGRpYWxvZ092ZXJsYXlcXGDoioLngrnlv4Xpobvlj6rog73ljIXlkKvkuIDkuKpcXGBkaWFsb2dcXGDoioLngrnvvIzlubbkuJRcXGBkaWFsb2dcXGDoioLngrnlv4XpobvmmK9cXGBkaWFsb2dPdmVybGF5XFxg6IqC54K555qE5ZSv5LiA5a2p5a2Q6IqC54K577yMXFxgZGlhbG9nXFxg6IqC54K555u45a+5XFxgZGlhbG9nT3ZlcmxheVxcYOiKgueCueW/hemhu+WxheS4reWxleekuu+8jFxcYGRpYWxvZ1xcYOeahGNzc+S7o+eggeWmguS4i++8mlxuXFxgXFxgXFxgY3NzXG4uLi5cbnBvc2l0aW9uOiBhYnNvbHV0ZTtcbnRvcDogNTAlO1xubGVmdDogNTAlO1xudHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4uLi5cblxcYFxcYFxcYFxuLSBcXGBpbmxpbmVCbG9ja0FuZFdyYXBcXGDoioLngrnlv4XpobvljIXlkKtO5LiqXFxgYmxvY2tJdGVtXFxg6IqC54K577yM5L2/55So5Zy65pmv77ya5b2T6ZyA6KaB5bGV56S65aSa5Liq6IqC54K55qiq5o6S77yM5bm25LiU6L+Z5Lqb6IqC54K55a695bqm5LiN5Zu65a6a77yM5b2T54i25Lqy5a655Zmo6K+l6KGM5pi+56S65LiN5LiL6ZyA6KaB6Ieq5Yqo5o2i6KGM5biD5bGA5pe277yM5q+U5aaC77ya5aSa5Liq5qCH562+dGFn44CB54Ot6Zeo5pCc57SidGFn44CB5ZWG5ZOBdGFn562J562J5qCH562+dGFn57G75Zy65pmv44CCXG4tIFxcYG11bHRpU3RhdGVDb250YWluZXJcXGDoioLngrnlv4XpobvljIXlkKtO5LiqXFxgb25lU3RhdGVDb250ZW50Q29udGFpbmVyXFxg6IqC54K577yM5L2/55So5Zy65pmv77ya5b2T6ZyA6KaB5bGV56S65aSa5Liq5LiN5ZCM54q25oCB55qE5YaF5a655pe277yM5q+U5aaC77ya55m75b2V54q25oCB5LiL5bGV56S65Liq5Lq65L+h5oGv5YaF5a6577yM5pyq55m75b2V54q25oCB5LiL5bGV56S655m75b2V5rOo5YaM5YaF5a6544CCXG4tIFxcYHJhZGlvR3JvdXBcXGDoioLngrnlv4XpobvljIXlkKvlpJrkuKpcXGByYWRpb1xcYOiKgueCue+8jOS9v+eUqOWcuuaZr++8muWNlemAiee7hO+8jOavlOWmgu+8muaAp+WIq+mAieaLqeOAgeaUr+S7mOaWueW8j+mAieaLqeetieOAglxuLSBcXGBjaGVja0JveEdyb3VwXFxg6IqC54K55b+F6aG75YyF5ZCr5aSa5LiqXFxgY2hlY2tCb3hcXGDoioLngrnvvIzkvb/nlKjlnLrmma/vvJrlpJrpgInnu4TvvIzmr5TlpoLvvJrpgInmi6notK3nianovabllYblk4HjgIHpgInmi6nllYblk4Hop4TmoLznrYnjgIJcbi0gXFxgdmVydGljYWxMaXN0Vmlld1xcYOOAgVxcYGhvcml6b250YWxMaXN0Vmlld1xcYOiKgueCueW/hemhu+WMheWQq07kuKpcXGBsaXN0SXRlbUNhcmRcXGDoioLngrnvvIzkvb/nlKjlnLrmma/vvJrlvZPpnIDopoHlsZXnpLrlpJrkuKrnm7jlkIzmoLflvI/nmoRpdGVt6IqC54K556uW5o6S5oiW5qiq5o6S5pe277yM5q+U5aaC77ya54Ot6Zeo5ZWG5ZOB5YiX6KGo44CB5o6o6I2Q5ZWG5ZOB5YiX6KGo44CBeHh45YiX6KGo44CCXG4tIFxcYHZpZXdQYWdlclxcYOiKgueCueW/hemhu+WkmuS4qlxcYG9uZVZpZXdQYWdlckNvbnRlbnRcXGDoioLngrnvvIzlubbkuJTlv4XpobvopoHmnInkuIDkuKpcXGB2aWV3UGFnZXJJbmRpY2F0b3JDb250YWluZXJcXGDoioLngrnkuI5cXGB2aWV3UGFnZXJcXGDoioLngrnkvZzkuLrlhYTlvJ/oioLngrnvvIxcXGB2aWV3UGFnZXJJbmRpY2F0b3JDb250YWluZXJcXGDoioLngrnlv4XpobvljIXlkKvnnYDlpJrkuKpcXGByZWN0XFxg5oiWXFxgY2lyY2xlXFxg57uE5Lu277yM5YW25LitXFxgcmVjdFxcYOaIllxcYGNpcmNsZVxcYOe7hOS7tuS4jeWFgeiuuOa3u+WKoOWtqeWtkO+8jFxcYHJlY3RcXGDmiJZcXGBjaXJjbGVcXGDoioLngrnlsLHmmK/mjIfnpLrlmajnmoTlnIbngrksIOazqOaEj+i9ruaSreaMh+ekuuWZqOeahFxcYHJlY3RcXGDmiJZcXGBjaXJjbGVcXGDoioLngrnkuKrmlbDopoHlkoxcXGBvbmVWaWV3UGFnZXJDb250ZW50XFxg6IqC54K555qE5Liq5pWw5LiA5qC377yM5bm25LiU5q+P5LiA5LiqXFxgb25lVmlld1BhZ2VyQ29udGVudFxcYOiKgueCueeahOWGheWuuee7neWvueS4jeWPr+S7peecgeeVpe+8jOW/hemhu+iuvuiuoeecn+WunuWujOaVtOWGheWuue+8jOS9v+eUqOWcuuaZr++8muW9k+mcgOimgeWxleekuuWkmuS4qui9ruaSremhueaXtu+8jOavlOWmgu+8muW5v+WRiui9ruaSreOAgeWVhuWTgei9ruaSreetieOAglxuLSBcXGB0YWJDb250YWluZXJcXGDoioLngrnlv4XpobvljIXlkKtO5LiqXFxgb25lVGFiQ29udGVudENvbnRhaW5lclxcYOiKgueCue+8jOW5tuS4lOW/hemhu+imgeacieS4gOS4qlxcYHRhYk1lbnVCYXJcXGDoioLngrnkuI5cXGB0YWJDb250YWluZXJcXGDoioLngrnkvZzkuLrlhYTlvJ/oioLngrnvvIzlhbbkuK1cXGB0YWJNZW51QmFyXFxg6IqC54K55b+F6aG75YyF5ZCrTuS4qlxcYHRhYk1lbnVCYXJJdGVtXFxg6IqC54K577yM5q+P5LiA5LiqXFxgb25lVGFiQ29udGVudENvbnRhaW5lclxcYOiKgueCueeahOWGheWuuee7neWvueS4jeWPr+S7peecgeeVpe+8jOW/hemhu+iuvuiuoeecn+WunuWujOaVtOeahFxcYG9uZVRhYkNvbnRlbnRDb250YWluZXJcXGDoioLngrnlhoXlrrnvvIzkvb/nlKjlnLrmma/vvJrlvZPpnIDopoHlsZXnpLrlpJrkuKrmoIfnrb7pobXml7bvvIzmr5TlpoLvvJrljoblj7LlkozmlLbol4/nmoR0YWLmoIfnrb7pobXnrYnjgIJcbi0gXFxgYm90dG9tVGFiQ29udGVudENvbnRhaW5lclxcYOiKgueCueW/hemhu+WMheWQq07kuKpcXGBzdWJQYWdlXFxg6IqC54K577yM5bm25LiU5b+F6aG76KaB5pyJ5LiA5LiqXFxgYm90dG9tVGFiTmF2aWdhdGVCYXJcXGDoioLngrnkuI5cXGBib3R0b21UYWJDb250ZW50Q29udGFpbmVyXFxg6IqC54K55L2c5Li65YWE5byf6IqC54K577yMXFxgYm90dG9tVGFiQ29udGVudENvbnRhaW5lclxcYOiKgueCueeahHdpZHRo5ZKMaGVpZ2h05b+F6aG76K6+6K6h5Li6MTAwJe+8jOWFtuS4rVxcYGJvdHRvbVRhYk5hdmlnYXRlQmFyXFxg6IqC54K55b+F6aG75YyF5ZCrTuS4qlxcYGJvdHRvbVRhYk5hdmlnYXRlQmFySXRlbVxcYOiKgueCue+8jOS9v+eUqOWcuuaZr++8muW9k+mcgOimgeWxleekuuWkmuS4quW6lemDqOWvvOiIqumhueaXtu+8jOavlOWmgu+8mummlumhteOAgeWIhuexu+OAgei0reeJqei9puOAgeaIkeeahOetieW6lemDqOWvvOiIqumhueOAglxuXG4jIDXjgIHmlbDmja7ojrflj5bmlrnlvI9cXGBmcm9tQXBpT3JDYWNoZURhdGE6IHRydWVcXGDnmoTorr7nva7mnaHku7bvvJpcbi0gdnR5cGXlv4XpobvmmK9cXGB2ZXJ0aWNhbExpc3RWaWV3XFxg44CBXFxgaG9yaXpvbnRhbExpc3RWaWV3XFxg44CBXFxgdmlld1BhZ2VyXFxg44CBXFxgdGFiQ29udGFpbmVyXFxg44CBXFxgcmFkaW9Hcm91cFxcYOOAgVxcYGNoZWNrQm94R3JvdXBcXGDjgIFcXGBpbmxpbmVCbG9ja0FuZFdyYXBcXGDnsbvlnovnmoTnu4Tku7Zcbi0g6K+l57uE5Lu255qE5pWw5o2u5piv5LuO572R57uc5oiW6ICF5pys5Zyw5oyB5LmF5YyW57yT5a2Y5ouJ5Y+W5Zue5p2l55qE77yM5q+U5aaC77ya54Ot6Zeo5ZWG5ZOB5YiX6KGo57uE5Lu2XFxgdmVydGljYWxMaXN0Vmlld1xcYO+8jOivpee7hOS7tueahOaVsOaNruaYr+S7jue9kee7nOaIluiAheacrOWcsOaMgeS5heWMlue8k+WtmOaLieWPluWbnuadpeeahFxuLSDlpoLmnpzmmK/kuIDkupvkuI3pnIDopoHlkI7nq69BUEnogZTnvZHmiJbmnKzlnLDmjIHkuYXljJbnvJPlrZjmi4nlj5bojrflj5bnmoTpnZnmgIHlhpnmrbvnmoTmlbDmja7vvIzpgqPkuYjlsLHkuI3pnIDopoFmcm9tQXBpT3JDYWNoZURhdGHlsZ7mgKfkuobvvIzmr5TlpoLvvJrkuKrkurrkuK3lv4PliJfooajpobnjgIHorr7nva7liJfooajpobnjgIHoj5zljZXliJfooajpobnvvIzov5nkupvmoLnmnKzkuI3pnIDopoHnu4/ov4flkI7lj7BBUEnogZTnvZHmiJbmnKzlnLDmjIHkuYXljJbnvJPlrZjmi4nlj5bojrflj5bnmoTvvIzpgqPkuYjlsLHkuI3opoFmcm9tQXBpT3JDYWNoZURhdGHlsZ7mgKdcblxuIyA244CB6IqC54K55pi+56S66ZqQ6JeP6KeE5YiZXG4tIFxcYG9uZVN0YXRlQ29udGVudENvbnRhaW5lclxcYOOAgVxcYG9uZVZpZXdQYWdlckNvbnRlbnRcXGDjgIFcXGBvbmVUYWJDb250ZW50Q29udGFpbmVyXFxg6IqC54K55pi+56S65LiO6ZqQ6JeP55qE5YiH5o2i5b+F6aG75L2/55SoXFxgZGlzcGxheTogbm9uZVxcYOadpeWunueOsO+8jOS4jeiDveS9v+eUqFxcYG9wYWNpdHk6IDBcXGDlkoxcXGB2aXNpYmlsaXR5OiBoaWRkZW5cXGDmnaXlrp7njrBcblxuIyA344CB5b+F6aG75re75Yqg6IqC54K55pi+56S65ZKM6ZqQ6JeP55qE5YiH5o2ianPmlrnms5Vcbi0g5aaC5p6c5LiA5Liq6IqC54K56ZyA6KaB5pi+56S65ZKM6ZqQ6JeP55qE5YiH5o2i77yM6YKj5LmI5bCx5b+F6aG75re75Yqg5LiA5LiqanPmlrnms5XmnaXlrp7njrDmmL7npLrlkozpmpDol4/nmoTliIfmjaLvvIxqc+aWueazleeahOWRveWQjeinhOWIme+8mlxcYHN3aXRjaFRvXFxgICsg6IqC54K5aWTvvIzlubbkuJTor6Vqc+aWueazleS4jeW+l+W4puacieS7u+S9leWPguaVsOOAglxuLSBqc+aWueazleeahOWRveWQjeinhOWIme+8mlxcYHN3aXRjaFRvXFxgICsg6IqC54K5aWTvvIzmr5TlpoLvvJpcXGBzd2l0Y2hUb0FnZUNvbnRhaW5lclxcYOOAgVxcYHN3aXRjaFRvUGhvbmVDb250YWluZXJcXGBcbi0g5YiH5o2i5pi+56S65ZKM6ZqQ6JeP55qEanPmlrnms5XkuI3lvpfluKbmnInku7vkvZXlj4LmlbDvvIzmr5TlpoLvvJpcXGBzd2l0Y2hUb0FnZUNvbnRhaW5lcigpXFxg44CBXFxgc3dpdGNoVG9QaG9uZUNvbnRhaW5lcigpXFxgXG5cbiMgOOOAgee7hOS7tuexu+Wei+aemuS4viAodnR5cGUpXG4tIOWfuuehgDogXFxgdGV4dFxcYCwgXFxgYnV0dG9uXFxgLCBcXGB0ZXh0QnV0dG9uXFxgLCBcXGBpY29uQnV0dG9uXFxgLCBcXGBpY29uXFxgLCBcXGBpbWFnZVxcYCwgXFxgcmVjdFxcYCwgXFxgY2lyY2xlXFxgLCBcXGBsaW5lXFxgLCBcXGBjb250YWluZXJcXGBcbi0g5biD5bGAOiBcXGBtdWx0aVN0YXRlQ29udGFpbmVyXFxgLCBcXGBvbmVTdGF0ZUNvbnRlbnRDb250YWluZXJcXGAsIFxcYGlubGluZUJsb2NrQW5kV3JhcFxcYCwgXFxgYmxvY2tJdGVtXFxgLCBcXGB2ZXJ0aWNhbExpbmVhckxheW91dFxcYCwgXFxgaG9yaXpvbnRhbExpbmVhckxheW91dFxcYFxuLSDooajljZU6IFxcYGlucHV0XFxgLCBcXGBzd2l0Y2hcXGAsIFxcYHJhZGlvXFxgLCBcXGBjaGVja0JveFxcYCwgXFxgcmFkaW9Hcm91cFxcYCwgXFxgY2hlY2tCb3hHcm91cFxcYFxuLSDliJfooag6IFxcYHZlcnRpY2FsTGlzdFZpZXdcXGAsIFxcYGhvcml6b250YWxMaXN0Vmlld1xcYCwgXFxgbGlzdEl0ZW1DYXJkXFxgXG4tIOi9ruaSre+8mlxcYHZpZXdQYWdlclxcYCwgXFxgb25lVmlld1BhZ2VyQ29udGVudFxcYCwgXFxgdmlld1BhZ2VySW5kaWNhdG9yQ29udGFpbmVyXFxgXG4tIHRhYu+8mlxcYHRhYkNvbnRhaW5lclxcYCwgXFxgb25lVGFiQ29udGVudENvbnRhaW5lclxcYCwgXFxgdGFiTWVudUJhclxcYCwgXFxgdGFiTWVudUJhckl0ZW1cXGBcbi0g5bqV6YOo5a+86IiqOiBcXGBib3R0b21UYWJDb250ZW50Q29udGFpbmVyXFxgLCBcXGBzdWJQYWdlXFxgLCBcXGBib3R0b21UYWJOYXZpZ2F0ZUJhclxcYCwgXFxgYm90dG9tVGFiTmF2aWdhdGVCYXJJdGVtXFxgXG4tIOaTjeS9nOagj++8mlxcYHRvcE5hdmlnYXRlQmFyXFxgLCBcXGBib3R0b21PcGVyYXRlQmFyXFxgXG4tIOW8ueeqlzogXFxgZGlhbG9nXFxgLCBcXGBkaWFsb2dPdmVybGF5XFxgLCBcXGB0b2FzdFxcYCwgXFxgZHJvcERvd25NZW51XFxgLCBcXGBzaWRlU2xpZGVQYW5lbFxcYFxuLSDns7vnu5/pobbpg6jnirbmgIHmoI86IFxcYHBob25lVG9wU3RhdHVzQmFyXFxgXG5gIl19