冲突解决

dianlixunjian
徐景良 2024-11-24 09:54:34 +08:00
commit 94e5911303
3 changed files with 1244 additions and 1123 deletions

View File

@ -1,269 +1,311 @@
<template> <template>
<div class="statistical" id="bg-pan"> <div class="statistical" id="bg-pan">
<Map
<Map
@onload="handlerOnMapLoad" @onload="handlerOnMapLoad"
@handlerGetDetails="handlerGetDetails" @handlerGetDetails="handlerGetDetails"
style="position: absolute; top: 0px; left: 0px;height: calc( 100vh - 80px);width:100%;z-index:0;" style="
position: absolute;
top: 0px;
left: 0px;
height: calc(100vh - 80px);
width: 100%;
z-index: 0;
"
ref="MapboxComponent" ref="MapboxComponent"
@showMonitor="showMonitor" @showMonitor="showMonitor"
@handlerQueryIntersectTif="handlerQueryIntersectTif" @handlerQueryIntersectTif="handlerQueryIntersectTif"
></Map> :layer="layerSettings"
/>
<div style="position: absolute; left:60px; bottom: 20px; z-index:1;">
<div :class="`button-item ${buttonSelect == 1? 'button-select': ''}`" style="margin-bottom: 10px" @click="changeLayer(1)"></div>
<div :class="`button-item ${buttonSelect == 2? 'button-select': ''}`" style="margin-bottom: 10px" @click="changeLayer(2)"></div>
<div :class="`button-item ${buttonSelect == 3? 'button-select': ''}`" @click="changeLayer(3)"></div>
</div>
<div class="legend">
<div class="legend-item" v-for="(item,index) in legends" :key="index">
<div class="legend-dot" :style="{background:item.color}"></div>
<div class="legend-label">{{item.label}}</div>
</div>
</div>
<a-modal
style="width: 100vw; top: 0px; left: 0px; margin: 0px; padding: 0px"
wrap-class-name="full-modal"
v-model:open="showInfoOpen"
title="详情"
:footer="null"
:maskClosable="true"
:destroyOnClose="true"
@cancel="showInfoOpen = false"
>
<div class="modal-content">
<ShowInfoModal v-if="showInfoOpen" :showInfoData="showInfoData" />
</div>
</a-modal>
<!-- 图层控制 视频监控-->
<div class="layer-center-container">
<LayerCenter
@drawPolygon="drawPolygon"
@cancleDrawPolygon="cancleDrawPolygon"
@changeTifLayer="changeTifLayer"
ref="LayerCenterComponent"></LayerCenter>
</div>
<div class="TC-videoi-container" v-if="showTCLPlayer" v-drag>
<div class="close-button" @click="showTCLPlayer = false;">
<CloseOutlined></CloseOutlined>
</div>
<Monitor v-if="showTCLPlayer" :play-url="playUrl"></Monitor>
</div>
<div style="position: absolute; left: 60px; bottom: 20px; z-index: 1">
<div
:class="`button-item ${buttonSelect == 1 ? 'button-select' : ''}`"
style="margin-bottom: 10px"
@click="changeLayer(1)"
>导航地图</div
>
<div
:class="`button-item ${buttonSelect == 2 ? 'button-select' : ''}`"
style="margin-bottom: 10px"
@click="changeLayer(2)"
>卫星地图</div
>
<div
:class="`button-item ${buttonSelect == 3 ? 'button-select' : ''}`"
@click="changeLayer(3)"
>白板地图</div
>
</div> </div>
</template>
<script lang="ts" setup> <div class="legend">
import { ref, onMounted, onUnmounted, computed } from 'vue'; <div class="legend-item" v-for="(item, index) in legends" :key="index">
import Map from './Converge/index.vue'; <div class="legend-dot" :style="{ background: item.color }"></div>
import layerButton from './mapComponent/left_layerButton.vue'; <div class="legend-label">{{ item.label }}</div>
import statisticalType from './mapComponent/left_statisticalType.vue'; </div>
import county from './mapComponent/left_county.vue'; </div>
import DataScreen from './dataScreen/index.vue'
import Header from './mapComponent/top_title.vue'
import ShowInfoModal from '@/views/demo/tiankongdi/curbspotcity/MapList/ShowInfoModal/index.vue';
import { getLoadDroneCaseInfoDetail, getCaseInfoById } from '@/api/tiankongdi/index';
// details
const showInfoOpen = ref<Boolean>(false);
const showInfoData = ref();
const buttonSelect = ref(2)
const getInfoList = (id) => { <a-modal
getCaseInfoById({id:id}).then(res => { style="width: 100vw; top: 0px; left: 0px; margin: 0px; padding: 0px"
if(res){ wrap-class-name="full-modal"
showInfoData.value = res v-model:open="showInfoOpen"
showInfoOpen.value = true; title="详情"
}else{ :footer="null"
:maskClosable="true"
:destroyOnClose="true"
@cancel="showInfoOpen = false"
>
<div class="modal-content">
<ShowInfoModal v-if="showInfoOpen" :showInfoData="showInfoData" />
</div>
</a-modal>
} <!-- 图层控制 视频监控-->
})
};
const MapboxComponent = ref(); <div class="layer-center-container">
const countyId = ref(); <LayerCenter
@drawPolygon="drawPolygon"
@cancleDrawPolygon="cancleDrawPolygon"
@changeTifLayer="changeTifLayer"
ref="LayerCenterComponent"
></LayerCenter>
</div>
const legends = ref([ <div class="TC-videoi-container" v-if="showTCLPlayer" v-drag>
{ <div class="close-button" @click="showTCLPlayer = false">
label:"违法", <CloseOutlined></CloseOutlined>
color:"#F70303", </div>
},{ <Monitor v-if="showTCLPlayer" :play-url="playUrl"></Monitor>
label:"合法", </div>
color:"#0AF703", </div>
},{ </template>
label:"其他",
color:"#0382F7",
},{
label:"补办手续",
color:"#AD04F4",
},{
label:"拆除复耕",
color:"#F4E004",
},
])
function handlerOnMapLoad(){ <script lang="ts" setup>
import { ref, onMounted, onUnmounted, computed } from 'vue';
import Map from './Converge/index.vue';
import layerButton from './mapComponent/left_layerButton.vue';
import statisticalType from './mapComponent/left_statisticalType.vue';
import county from './mapComponent/left_county.vue';
import DataScreen from './dataScreen/index.vue';
import Header from './mapComponent/top_title.vue';
import ShowInfoModal from '@/views/demo/tiankongdi/curbspotcity/MapList/ShowInfoModal/index.vue';
import { getLoadDroneCaseInfoDetail, getCaseInfoById } from '@/api/tiankongdi/index';
import { useRoute } from 'vue-router';
import { getConfig } from '@/api/sys/layerManagement';
} const route: any = useRoute();
const subject = ref(route.params.id);
const legends: any = ref([]);
const layerSettings = ref();
// details
const showInfoOpen = ref<Boolean>(false);
const showInfoData = ref();
const buttonSelect = ref(2);
function handlerGetDetails(e){ const getInfoList = (id) => {
getInfoList(e.Id); getCaseInfoById({ id: id }).then((res) => {
} if (res) {
showInfoData.value = res;
// showInfoOpen.value = true;
const currentCounty = ref({ name: '', code: '' }); } else {
function countyClick(data) {
countyId.value = data.id;
currentCounty.value = { name: data['name'], code: data['id'] };
MapboxComponent.value.handlerChangeCounty(currentCounty.value);
}
//
function handlerChangePolygonType(data) {
MapboxComponent.value.handlerLoadPolygon(currentCounty.value['code'], data);
}
//
function changeLandType(type):void{
MapboxComponent.value.handlerLoadPolygon(currentCounty.value['code'], "",type);
}
const changeLayer = (value) => {
buttonSelect.value = value
switch(value){
case 1:
MapboxComponent.value.handlerChangeLayerVisible('tdt-img-tiles',false)
MapboxComponent.value.handlerChangeLayerVisible('tdt-vec-tiles',true)
MapboxComponent.value.handlerChangeLayerVisible('countyPanelLayer',false)
break;
case 2:
MapboxComponent.value.handlerChangeLayerVisible('tdt-img-tiles',true)
MapboxComponent.value.handlerChangeLayerVisible('tdt-vec-tiles',false)
MapboxComponent.value.handlerChangeLayerVisible('countyPanelLayer',false)
break;
case 3:
MapboxComponent.value.handlerChangeLayerVisible('tdt-img-tiles',false)
MapboxComponent.value.handlerChangeLayerVisible('tdt-vec-tiles',false)
MapboxComponent.value.handlerChangeLayerVisible('countyPanelLayer',true)
break;
} }
});
};
const MapboxComponent = ref();
const countyId = ref();
function getLayerSettings() {
let title = '';
switch (subject.value) {
case '违法用地':
title = 'Subject_WFYD';
break;
case '非法采矿':
title = 'Subject_FFCK';
break;
case '耕地非粮化':
title = 'Subject_GDFLH';
break;
case '重点问题':
title = 'Subject_ZDWT';
break;
case '巡察审计':
title = 'Subject_XCSJ';
break;
case '生态保护红线监管':
title = 'Subject_STBHHXJG';
break;
case '生态修复':
title = 'Subject_STXF';
break;
} }
getConfig({
code: title,
}).then((res) => {
let obj = JSON.parse(res.codeValue);
layerSettings.value = obj[0];
let legend = layerSettings.value.legend[0];
for (const key in legend) {
legends.value.push({
label: key,
color: legend[key].colour,
});
}
});
}
function handlerOnMapLoad() {}
function handlerGetDetails(e) {
getInfoList(e.Id);
}
/*图层控制 视频监控*/ //
import LayerCenter from './mapComponent/layers/index.vue'; const currentCounty = ref({ name: '', code: '' });
function countyClick(data) {
countyId.value = data.id;
currentCounty.value = { name: data['name'], code: data['id'] };
MapboxComponent.value.handlerChangeCounty(currentCounty.value);
}
// //
import Monitor from './mapComponent/monitor/index.vue'; function handlerChangePolygonType(data) {
import {CloseOutlined} from "@ant-design/icons-vue" MapboxComponent.value.handlerLoadPolygon(currentCounty.value['code'], data);
}
const showTCLPlayer = ref(false); //
const playUrl = ref(""); function changeLandType(type): void {
function showMonitor(info){ MapboxComponent.value.handlerLoadPolygon(currentCounty.value['code'], '', type);
playUrl.value = info.playUrl }
showTCLPlayer.value = true; const changeLayer = (value) => {
buttonSelect.value = value;
switch (value) {
case 1:
MapboxComponent.value.handlerChangeLayerVisible('tdt-img-tiles', false);
MapboxComponent.value.handlerChangeLayerVisible('tdt-vec-tiles', true);
MapboxComponent.value.handlerChangeLayerVisible('countyPanelLayer', false);
break;
case 2:
MapboxComponent.value.handlerChangeLayerVisible('tdt-img-tiles', true);
MapboxComponent.value.handlerChangeLayerVisible('tdt-vec-tiles', false);
MapboxComponent.value.handlerChangeLayerVisible('countyPanelLayer', false);
break;
case 3:
MapboxComponent.value.handlerChangeLayerVisible('tdt-img-tiles', false);
MapboxComponent.value.handlerChangeLayerVisible('tdt-vec-tiles', false);
MapboxComponent.value.handlerChangeLayerVisible('countyPanelLayer', true);
break;
} }
};
// /*图层控制 视频监控*/
import LayerCenter from './mapComponent/layers/index.vue';
function drawPolygon(state){ //
// Map import Monitor from './mapComponent/monitor/index.vue';
MapboxComponent.value.handlerDrawPolygon(); import { CloseOutlined } from '@ant-design/icons-vue';
}
function cancleDrawPolygon(){ const showTCLPlayer = ref(false);
MapboxComponent.value.handlerDeletePolygon(); const playUrl = ref('');
} function showMonitor(info) {
playUrl.value = info.playUrl;
showTCLPlayer.value = true;
}
const LayerCenterComponent = ref(); //
function handlerQueryIntersectTif(wktStr){
LayerCenterComponent.value.handlerQueryIntersectTif(wktStr);
}
function drawPolygon(state) {
// Map
MapboxComponent.value.handlerDrawPolygon();
}
function changeTifLayer(layer){ function cancleDrawPolygon() {
console.log("layer",layer); MapboxComponent.value.handlerDeletePolygon();
}
MapboxComponent.value.handlerChangeTifLayer(layer); const LayerCenterComponent = ref();
} function handlerQueryIntersectTif(wktStr) {
</script> LayerCenterComponent.value.handlerQueryIntersectTif(wktStr);
}
<style lang="less" scoped> function changeTifLayer(layer) {
.button-item{ console.log('layer', layer);
width: 96px;
height: 32px;
display: flex;
justify-content: center;
align-items: center;
font-family: Microsoft YaHei;
font-weight: 400;
font-size: 11px;
color: #7EBBFF;
background: url('@/assets/statistical/blue_bg.png') no-repeat;
background-size: cover;
}
.button-select{
color: #06EBB7;
background: url('@/assets/statistical/green_bg.png') no-repeat;
background-size: cover;
} MapboxComponent.value.handlerChangeTifLayer(layer);
.statistical { }
// position: relative; onMounted(() => {
// getLayerSettings();
-webkit-user-select: none; /* Safari */ });
-moz-user-select: none; /* Firefox */ </script>
-ms-user-select: none; /* IE/Edge */
user-select: none;
}
#bg-pan{ <style lang="less" scoped>
.button-item {
width: 96px;
height: 32px;
display: flex;
justify-content: center;
align-items: center;
font-family: Microsoft YaHei;
font-weight: 400;
font-size: 11px;
color: #7ebbff;
background: url('@/assets/statistical/blue_bg.png') no-repeat;
background-size: cover;
}
.button-select {
color: #06ebb7;
background: url('@/assets/statistical/green_bg.png') no-repeat;
background-size: cover;
}
.statistical {
// position: relative;
//
-webkit-user-select: none; /* Safari */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* IE/Edge */
user-select: none;
}
} #bg-pan {
#alertOverlay::before,#alertOverlay::after { }
content: ""; #alertOverlay::before,
#alertOverlay::after {
content: '';
position: absolute; position: absolute;
width: 50px; width: 50px;
height: 100%; height: 100%;
} }
#alertOverlay div::before,#alertOverlay div::after { #alertOverlay div::before,
content: ""; #alertOverlay div::after {
content: '';
position: absolute; position: absolute;
width: 100%; width: 100%;
height: 50px; height: 50px;
} }
#alertOverlay::before { #alertOverlay::before {
background: linear-gradient(to right, rgba(0, 0, 0,0.8), transparent); background: linear-gradient(to right, rgba(0, 0, 0, 0.8), transparent);
top: 0; top: 0;
left: 0; left: 0;
transform: rotate(0deg); transform: rotate(0deg);
} }
#alertOverlay::after { #alertOverlay::after {
background: linear-gradient(to left, rgba(0, 0, 0,0.8), transparent); background: linear-gradient(to left, rgba(0, 0, 0, 0.8), transparent);
top: 0%; top: 0%;
left: 100%; left: 100%;
transform: rotate(0deg) translate(calc(-1 * 50px), 0px); transform: rotate(0deg) translate(calc(-1 * 50px), 0px);
} }
#alertOverlay div::before { #alertOverlay div::before {
background: linear-gradient(to top, rgba(0, 0, 0,0.8), transparent); background: linear-gradient(to top, rgba(0, 0, 0, 0.8), transparent);
top: 0; top: 0;
left: 0; left: 0;
transform: rotate(180deg); transform: rotate(180deg);
} }
#alertOverlay div::after { #alertOverlay div::after {
background: linear-gradient(to top, rgba(0, 0, 0,0.8), transparent); background: linear-gradient(to top, rgba(0, 0, 0, 0.8), transparent);
top: 100%; top: 100%;
left: 0; left: 0;
transform: rotate(0deg) translate(0px, calc(-1 * 50px)); transform: rotate(0deg) translate(0px, calc(-1 * 50px));
@ -282,7 +324,7 @@
z-index: 1; z-index: 1;
} }
.alert-active{ .alert-active {
animation: blink 0s infinite; animation: blink 0s infinite;
} }
@ -298,82 +340,78 @@
} }
} }
.legend{ .legend {
width:200px; width: 200px;
padding:10px; padding: 10px;
position:absolute; position: absolute;
bottom:20px; bottom: 20px;
right:20px; right: 20px;
display:flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
column-gap: 30px; column-gap: 30px;
border-radius: 8px; border-radius: 8px;
background-image:url("/statistical/left_statistical.png"); background-image: url('/statistical/left_statistical.png');
background-size:100% 100%; background-size: 100% 100%;
.legend-item{ .legend-item {
padding:5px 0px; padding: 5px 0px;
font-size:14px; font-size: 14px;
color:#666666; color: #666666;
display:flex; display: flex;
flex: 48% 48%; flex: 48% 48%;
color:#7ebbff; color: #7ebbff;
.legend-dot{ .legend-dot {
width:14px; width: 14px;
height:14px; height: 14px;
} }
.legend-label{ .legend-label {
margin-left:12px; margin-left: 12px;
} }
} }
} }
/**图层控制 视频监控**/
.layer-center-container {
/**图层控制 视频监控**/ width: 208px;
.layer-center-container{
width:208px;
position:absolute;
bottom:0px;
left:20px;
z-index:99999;
}
.TC-videoi-container{
position: absolute; position: absolute;
bottom:48px; bottom: 0px;
right:38px; left: 20px;
width:418px; z-index: 99999;
height:300px; }
.close-button{
width:28px; .TC-videoi-container {
height:28px; position: absolute;
background:rgba(0, 0, 0, 0.6); bottom: 48px;
right: 38px;
width: 418px;
height: 300px;
.close-button {
width: 28px;
height: 28px;
background: rgba(0, 0, 0, 0.6);
text-align: center; text-align: center;
line-height:28px; line-height: 28px;
position:absolute; position: absolute;
top:4px; top: 4px;
right:4px; right: 4px;
z-index:999999; z-index: 999999;
color:#fff; color: #fff;
cursor:pointer; cursor: pointer;
} }
} }
.selection-button{ .selection-button {
position:absolute; position: absolute;
cursor:pointer; cursor: pointer;
top:20px; top: 20px;
left:220px; left: 220px;
width:140px; width: 140px;
height:40px; height: 40px;
margin-left:20px; margin-left: 20px;
background-image: url(/map/change-view-btn.png); background-image: url(/map/change-view-btn.png);
background-size:100% 100%; background-size: 100% 100%;
color:#efefef; color: #efefef;
text-align: center; text-align: center;
line-height:46px; line-height: 46px;
font-size:14px; font-size: 14px;
} }
</style> </style>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,66 @@
// vite.config.ts
import { defineApplicationConfig } from "file:///F:/%E9%A1%B9%E7%9B%AE/%E8%B4%A2%E6%BA%90%E4%B8%80%E4%BD%93%E5%8C%96/CaiYuanYiTiHua/internal/vite-config/dist/index.mjs";
var vite_config_default = defineApplicationConfig({
overrides: {
optimizeDeps: {
include: [
"echarts/core",
"echarts/charts",
"echarts/components",
"echarts/renderers",
"qrcode",
"@iconify/iconify",
"ant-design-vue/es/locale/zh_CN",
"ant-design-vue/es/locale/en_US",
"@/../lib/vform/designer.umd.js"
]
},
build: {
/* 其他build生产打包配置省略 */
//...
target: "esnext",
commonjsOptions: {
include: /node_modules|lib/
//这里记得把lib目录加进来否则生产打包会报错
}
},
server: {
proxy: {
"/basic-api": {
target: "http://localhost:3000",
changeOrigin: true,
ws: true,
rewrite: (path) => path.replace(new RegExp(`^/basic-api`), "")
// only https
// secure: false
},
"/upload": {
target: "http://localhost:3300/upload",
changeOrigin: true,
ws: true,
rewrite: (path) => path.replace(new RegExp(`^/upload`), "")
}
},
warmup: {
clientFiles: ["./index.html", "./src/{views,components}/*"]
}
},
define: {
"process.env": {
BASE_URL: "/"
}
},
css: {
preprocessorOptions: {
less: {
javascriptEnabled: true
}
}
},
plugins: []
}
});
export {
vite_config_default as default
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJGOlxcXFxcdTk4NzlcdTc2RUVcXFxcXHU4RDIyXHU2RTkwXHU0RTAwXHU0RjUzXHU1MzE2XFxcXENhaVl1YW5ZaVRpSHVhXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJGOlxcXFxcdTk4NzlcdTc2RUVcXFxcXHU4RDIyXHU2RTkwXHU0RTAwXHU0RjUzXHU1MzE2XFxcXENhaVl1YW5ZaVRpSHVhXFxcXHZpdGUuY29uZmlnLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9GOi8lRTklQTElQjklRTclOUIlQUUvJUU4JUI0JUEyJUU2JUJBJTkwJUU0JUI4JTgwJUU0JUJEJTkzJUU1JThDJTk2L0NhaVl1YW5ZaVRpSHVhL3ZpdGUuY29uZmlnLnRzXCI7aW1wb3J0IHsgZGVmaW5lQXBwbGljYXRpb25Db25maWcgfSBmcm9tICdAdmJlbi92aXRlLWNvbmZpZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZUFwcGxpY2F0aW9uQ29uZmlnKHtcbiAgb3ZlcnJpZGVzOiB7XG4gICAgb3B0aW1pemVEZXBzOiB7XG4gICAgICBpbmNsdWRlOiBbXG4gICAgICAgICdlY2hhcnRzL2NvcmUnLFxuICAgICAgICAnZWNoYXJ0cy9jaGFydHMnLFxuICAgICAgICAnZWNoYXJ0cy9jb21wb25lbnRzJyxcbiAgICAgICAgJ2VjaGFydHMvcmVuZGVyZXJzJyxcbiAgICAgICAgJ3FyY29kZScsXG4gICAgICAgICdAaWNvbmlmeS9pY29uaWZ5JyxcbiAgICAgICAgJ2FudC1kZXNpZ24tdnVlL2VzL2xvY2FsZS96aF9DTicsXG4gICAgICAgICdhbnQtZGVzaWduLXZ1ZS9lcy9sb2NhbGUvZW5fVVMnLFxuICAgICAgICAnQC8uLi9saWIvdmZvcm0vZGVzaWduZXIudW1kLmpzJyxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBidWlsZDoge1xuICAgICAgLyogXHU1MTc2XHU0RUQ2YnVpbGRcdTc1MUZcdTRFQTdcdTYyNTNcdTUzMDVcdTkxNERcdTdGNkVcdTc3MDFcdTc1NjUgKi9cbiAgICAgIC8vLi4uXG4gICAgICB0YXJnZXQ6ICdlc25leHQnLFxuICAgICAgY29tbW9uanNPcHRpb25zOiB7XG4gICAgICAgIGluY2x1ZGU6IC9ub2RlX21vZHVsZXN8bGliLywgLy9cdThGRDlcdTkxQ0NcdThCQjBcdTVGOTdcdTYyOEFsaWJcdTc2RUVcdTVGNTVcdTUyQTBcdThGREJcdTY3NjVcdUZGMENcdTU0MjZcdTUyMTlcdTc1MUZcdTRFQTdcdTYyNTNcdTUzMDVcdTRGMUFcdTYyQTVcdTk1MTlcdUZGMDFcdUZGMDFcbiAgICAgIH0sXG4gICAgfSxcbiAgICBzZXJ2ZXI6IHtcbiAgICAgIHByb3h5OiB7XG4gICAgICAgICcvYmFzaWMtYXBpJzoge1xuICAgICAgICAgIHRhcmdldDogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCcsXG4gICAgICAgICAgY2hhbmdlT3JpZ2luOiB0cnVlLFxuICAgICAgICAgIHdzOiB0cnVlLFxuICAgICAgICAgIHJld3JpdGU6IChwYXRoKSA9PiBwYXRoLnJlcGxhY2UobmV3IFJlZ0V4cChgXi9iYXNpYy1hcGlgKSwgJycpLFxuICAgICAgICAgIC8vIG9ubHkgaHR0cHNcbiAgICAgICAgICAvLyBzZWN1cmU6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgICcvdXBsb2FkJzoge1xuICAgICAgICAgIHRhcmdldDogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzMwMC91cGxvYWQnLFxuICAgICAgICAgIGNoYW5nZU9yaWdpbjogdHJ1ZSxcbiAgICAgICAgICB3czogdHJ1ZSxcbiAgICAgICAgICByZXdyaXRlOiAocGF0aCkgPT4gcGF0aC5yZXBsYWNlKG5ldyBSZWdFeHAoYF4vdXBsb2FkYCksICcnKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB3YXJtdXA6IHtcbiAgICAgICAgY2xpZW50RmlsZXM6IFsnLi9pbmRleC5odG1sJywgJy4vc3JjL3t2aWV3cyxjb21wb25lbnRzfS8qJ10sXG4gICAgICB9LFxuICAgIH0sXG4gICAgZGVmaW5lOiB7XG4gICAgICAncHJvY2Vzcy5lbnYnOiB7XG4gICAgICAgIEJBU0VfVVJMOiAnLycsXG4gICAgICB9LFxuICAgIH0sXG4gICAgY3NzOiB7XG4gICAgICBwcmVwcm9jZXNzb3JPcHRpb25zOiB7XG4gICAgICAgIGxlc3M6IHtcbiAgICAgICAgICBqYXZhc2NyaXB0RW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBwbHVnaW5zOiBbXSxcbiAgfSxcbn0pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFnVSxTQUFTLCtCQUErQjtBQUV4VyxJQUFPLHNCQUFRLHdCQUF3QjtBQUFBLEVBQ3JDLFdBQVc7QUFBQSxJQUNULGNBQWM7QUFBQSxNQUNaLFNBQVM7QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLElBQ0EsT0FBTztBQUFBO0FBQUE7QUFBQSxNQUdMLFFBQVE7QUFBQSxNQUNSLGlCQUFpQjtBQUFBLFFBQ2YsU0FBUztBQUFBO0FBQUEsTUFDWDtBQUFBLElBQ0Y7QUFBQSxJQUNBLFFBQVE7QUFBQSxNQUNOLE9BQU87QUFBQSxRQUNMLGNBQWM7QUFBQSxVQUNaLFFBQVE7QUFBQSxVQUNSLGNBQWM7QUFBQSxVQUNkLElBQUk7QUFBQSxVQUNKLFNBQVMsQ0FBQyxTQUFTLEtBQUssUUFBUSxJQUFJLE9BQU8sYUFBYSxHQUFHLEVBQUU7QUFBQTtBQUFBO0FBQUEsUUFHL0Q7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNULFFBQVE7QUFBQSxVQUNSLGNBQWM7QUFBQSxVQUNkLElBQUk7QUFBQSxVQUNKLFNBQVMsQ0FBQyxTQUFTLEtBQUssUUFBUSxJQUFJLE9BQU8sVUFBVSxHQUFHLEVBQUU7QUFBQSxRQUM1RDtBQUFBLE1BQ0Y7QUFBQSxNQUNBLFFBQVE7QUFBQSxRQUNOLGFBQWEsQ0FBQyxnQkFBZ0IsNEJBQTRCO0FBQUEsTUFDNUQ7QUFBQSxJQUNGO0FBQUEsSUFDQSxRQUFRO0FBQUEsTUFDTixlQUFlO0FBQUEsUUFDYixVQUFVO0FBQUEsTUFDWjtBQUFBLElBQ0Y7QUFBQSxJQUNBLEtBQUs7QUFBQSxNQUNILHFCQUFxQjtBQUFBLFFBQ25CLE1BQU07QUFBQSxVQUNKLG1CQUFtQjtBQUFBLFFBQ3JCO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxJQUNBLFNBQVMsQ0FBQztBQUFBLEVBQ1o7QUFDRixDQUFDOyIsCiAgIm5hbWVzIjogW10KfQo=