@adstore/templates 2.0.9 → 2.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/dist/style.css +32 -17
- package/dist/templates.es.js +50 -602
- package/dist/templates.umd.js +50 -602
- package/package.json +1 -1
package/dist/templates.umd.js
CHANGED
@@ -485,15 +485,15 @@
|
|
485
485
|
var arrayProto = Array.prototype;
|
486
486
|
var splice = arrayProto.splice;
|
487
487
|
function listCacheDelete$1(key) {
|
488
|
-
var
|
488
|
+
var data = this.__data__, index2 = assocIndexOf$3(data, key);
|
489
489
|
if (index2 < 0) {
|
490
490
|
return false;
|
491
491
|
}
|
492
|
-
var lastIndex =
|
492
|
+
var lastIndex = data.length - 1;
|
493
493
|
if (index2 == lastIndex) {
|
494
|
-
|
494
|
+
data.pop();
|
495
495
|
} else {
|
496
|
-
splice.call(
|
496
|
+
splice.call(data, index2, 1);
|
497
497
|
}
|
498
498
|
--this.size;
|
499
499
|
return true;
|
@@ -501,8 +501,8 @@
|
|
501
501
|
var _listCacheDelete = listCacheDelete$1;
|
502
502
|
var assocIndexOf$2 = _assocIndexOf;
|
503
503
|
function listCacheGet$1(key) {
|
504
|
-
var
|
505
|
-
return index2 < 0 ? void 0 :
|
504
|
+
var data = this.__data__, index2 = assocIndexOf$2(data, key);
|
505
|
+
return index2 < 0 ? void 0 : data[index2][1];
|
506
506
|
}
|
507
507
|
var _listCacheGet = listCacheGet$1;
|
508
508
|
var assocIndexOf$1 = _assocIndexOf;
|
@@ -512,12 +512,12 @@
|
|
512
512
|
var _listCacheHas = listCacheHas$1;
|
513
513
|
var assocIndexOf = _assocIndexOf;
|
514
514
|
function listCacheSet$1(key, value) {
|
515
|
-
var
|
515
|
+
var data = this.__data__, index2 = assocIndexOf(data, key);
|
516
516
|
if (index2 < 0) {
|
517
517
|
++this.size;
|
518
|
-
|
518
|
+
data.push([key, value]);
|
519
519
|
} else {
|
520
|
-
|
520
|
+
data[index2][1] = value;
|
521
521
|
}
|
522
522
|
return this;
|
523
523
|
}
|
@@ -544,8 +544,8 @@
|
|
544
544
|
}
|
545
545
|
var _stackClear = stackClear$1;
|
546
546
|
function stackDelete$1(key) {
|
547
|
-
var
|
548
|
-
this.size =
|
547
|
+
var data = this.__data__, result = data["delete"](key);
|
548
|
+
this.size = data.size;
|
549
549
|
return result;
|
550
550
|
}
|
551
551
|
var _stackDelete = stackDelete$1;
|
@@ -698,28 +698,28 @@
|
|
698
698
|
var objectProto$7 = Object.prototype;
|
699
699
|
var hasOwnProperty$6 = objectProto$7.hasOwnProperty;
|
700
700
|
function hashGet$1(key) {
|
701
|
-
var
|
701
|
+
var data = this.__data__;
|
702
702
|
if (nativeCreate$2) {
|
703
|
-
var result =
|
703
|
+
var result = data[key];
|
704
704
|
return result === HASH_UNDEFINED$1 ? void 0 : result;
|
705
705
|
}
|
706
|
-
return hasOwnProperty$6.call(
|
706
|
+
return hasOwnProperty$6.call(data, key) ? data[key] : void 0;
|
707
707
|
}
|
708
708
|
var _hashGet = hashGet$1;
|
709
709
|
var nativeCreate$1 = _nativeCreate;
|
710
710
|
var objectProto$6 = Object.prototype;
|
711
711
|
var hasOwnProperty$5 = objectProto$6.hasOwnProperty;
|
712
712
|
function hashHas$1(key) {
|
713
|
-
var
|
714
|
-
return nativeCreate$1 ?
|
713
|
+
var data = this.__data__;
|
714
|
+
return nativeCreate$1 ? data[key] !== void 0 : hasOwnProperty$5.call(data, key);
|
715
715
|
}
|
716
716
|
var _hashHas = hashHas$1;
|
717
717
|
var nativeCreate = _nativeCreate;
|
718
718
|
var HASH_UNDEFINED = "__lodash_hash_undefined__";
|
719
719
|
function hashSet$1(key, value) {
|
720
|
-
var
|
720
|
+
var data = this.__data__;
|
721
721
|
this.size += this.has(key) ? 0 : 1;
|
722
|
-
|
722
|
+
data[key] = nativeCreate && value === void 0 ? HASH_UNDEFINED : value;
|
723
723
|
return this;
|
724
724
|
}
|
725
725
|
var _hashSet = hashSet$1;
|
@@ -755,8 +755,8 @@
|
|
755
755
|
var _isKeyable = isKeyable$1;
|
756
756
|
var isKeyable = _isKeyable;
|
757
757
|
function getMapData$4(map, key) {
|
758
|
-
var
|
759
|
-
return isKeyable(key) ?
|
758
|
+
var data = map.__data__;
|
759
|
+
return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map;
|
760
760
|
}
|
761
761
|
var _getMapData = getMapData$4;
|
762
762
|
var getMapData$3 = _getMapData;
|
@@ -778,9 +778,9 @@
|
|
778
778
|
var _mapCacheHas = mapCacheHas$1;
|
779
779
|
var getMapData = _getMapData;
|
780
780
|
function mapCacheSet$1(key, value) {
|
781
|
-
var
|
782
|
-
|
783
|
-
this.size +=
|
781
|
+
var data = getMapData(this, key), size = data.size;
|
782
|
+
data.set(key, value);
|
783
|
+
this.size += data.size == size ? 0 : 1;
|
784
784
|
return this;
|
785
785
|
}
|
786
786
|
var _mapCacheSet = mapCacheSet$1;
|
@@ -802,25 +802,25 @@
|
|
802
802
|
var ListCache$1 = _ListCache, Map$1 = _Map, MapCache = _MapCache;
|
803
803
|
var LARGE_ARRAY_SIZE = 200;
|
804
804
|
function stackSet$1(key, value) {
|
805
|
-
var
|
806
|
-
if (
|
807
|
-
var pairs =
|
805
|
+
var data = this.__data__;
|
806
|
+
if (data instanceof ListCache$1) {
|
807
|
+
var pairs = data.__data__;
|
808
808
|
if (!Map$1 || pairs.length < LARGE_ARRAY_SIZE - 1) {
|
809
809
|
pairs.push([key, value]);
|
810
|
-
this.size = ++
|
810
|
+
this.size = ++data.size;
|
811
811
|
return this;
|
812
812
|
}
|
813
|
-
|
813
|
+
data = this.__data__ = new MapCache(pairs);
|
814
814
|
}
|
815
|
-
|
816
|
-
this.size =
|
815
|
+
data.set(key, value);
|
816
|
+
this.size = data.size;
|
817
817
|
return this;
|
818
818
|
}
|
819
819
|
var _stackSet = stackSet$1;
|
820
820
|
var ListCache = _ListCache, stackClear = _stackClear, stackDelete = _stackDelete, stackGet = _stackGet, stackHas = _stackHas, stackSet = _stackSet;
|
821
821
|
function Stack$1(entries) {
|
822
|
-
var
|
823
|
-
this.size =
|
822
|
+
var data = this.__data__ = new ListCache(entries);
|
823
|
+
this.size = data.size;
|
824
824
|
}
|
825
825
|
Stack$1.prototype.clear = stackClear;
|
826
826
|
Stack$1.prototype["delete"] = stackDelete;
|
@@ -1719,558 +1719,6 @@
|
|
1719
1719
|
fontLinks.forEach((link) => injectLink(link));
|
1720
1720
|
}, [fontLinks]);
|
1721
1721
|
};
|
1722
|
-
const data = {
|
1723
|
-
id: "simpleGift",
|
1724
|
-
name: "root",
|
1725
|
-
root: {
|
1726
|
-
desktop: {
|
1727
|
-
parent: null,
|
1728
|
-
bookmakerName: "bookmaker",
|
1729
|
-
bookmakerSite: "site.com",
|
1730
|
-
bookmakerColor: "#7e8392ff",
|
1731
|
-
offer: "{offer:6693}",
|
1732
|
-
adfoxShow: "http://ads.adfox.ru/377087/getCode?p1=cvzct&p2=frfe&pfc=evfle&pfb=nxbss&pr=%random%&ptrc=b",
|
1733
|
-
adfoxClick: "http://ads.adfox.ru/377087/goLink?p1=cvzct&p2=frfe&p5=nxbss&pr=%random%"
|
1734
|
-
},
|
1735
|
-
laptop: {
|
1736
|
-
parent: null,
|
1737
|
-
bookmakerName: "bookmaker",
|
1738
|
-
bookmakerSite: "site.com",
|
1739
|
-
bookmakerColor: "#7e8392ff",
|
1740
|
-
offer: "{offer:6693}",
|
1741
|
-
adfoxShow: "http://ads.adfox.ru/377087/getCode?p1=cvzct&p2=frfe&pfc=evfle&pfb=nxbss&pr=%random%&ptrc=b",
|
1742
|
-
adfoxClick: "http://ads.adfox.ru/377087/goLink?p1=cvzct&p2=frfe&p5=nxbss&pr=%random%"
|
1743
|
-
},
|
1744
|
-
tablet: {
|
1745
|
-
parent: null,
|
1746
|
-
bookmakerName: "bookmaker",
|
1747
|
-
bookmakerSite: "site.com",
|
1748
|
-
bookmakerColor: "#7e8392ff",
|
1749
|
-
offer: "{offer:6693}",
|
1750
|
-
adfoxShow: "http://ads.adfox.ru/377087/getCode?p1=cvzct&p2=frfe&pfc=evfle&pfb=nxbss&pr=%random%&ptrc=b",
|
1751
|
-
adfoxClick: "http://ads.adfox.ru/377087/goLink?p1=cvzct&p2=frfe&p5=nxbss&pr=%random%"
|
1752
|
-
},
|
1753
|
-
mobile: {
|
1754
|
-
parent: null,
|
1755
|
-
bookmakerName: "bookmaker",
|
1756
|
-
bookmakerSite: "site.com",
|
1757
|
-
bookmakerColor: "#7e8392ff",
|
1758
|
-
offer: "{offer:6693}",
|
1759
|
-
adfoxShow: "http://ads.adfox.ru/377087/getCode?p1=cvzct&p2=frfe&pfc=evfle&pfb=nxbss&pr=%random%&ptrc=b",
|
1760
|
-
adfoxClick: "http://ads.adfox.ru/377087/goLink?p1=cvzct&p2=frfe&p5=nxbss&pr=%random%"
|
1761
|
-
}
|
1762
|
-
},
|
1763
|
-
container: {
|
1764
|
-
desktop: {
|
1765
|
-
parent: null,
|
1766
|
-
corner: 10,
|
1767
|
-
left: "-34",
|
1768
|
-
borderWidth: 2,
|
1769
|
-
delay: 1e3,
|
1770
|
-
borderColor: "#fed041",
|
1771
|
-
backgroundColor: "#000000",
|
1772
|
-
backgroundColorOpacity: 100,
|
1773
|
-
marginTop: 0,
|
1774
|
-
marginBottom: 0,
|
1775
|
-
marginLeft: 0,
|
1776
|
-
marginRight: 0,
|
1777
|
-
paddingTop: 10,
|
1778
|
-
paddingBottom: 10,
|
1779
|
-
paddingLeft: 10,
|
1780
|
-
paddingRight: 10
|
1781
|
-
},
|
1782
|
-
laptop: {
|
1783
|
-
parent: null,
|
1784
|
-
corner: 10,
|
1785
|
-
left: -30,
|
1786
|
-
borderWidth: 2,
|
1787
|
-
delay: 1e3,
|
1788
|
-
borderColor: "#fed041",
|
1789
|
-
backgroundColor: "#000000",
|
1790
|
-
backgroundColorOpacity: 100,
|
1791
|
-
marginTop: 0,
|
1792
|
-
marginBottom: 0,
|
1793
|
-
marginLeft: 0,
|
1794
|
-
marginRight: 0,
|
1795
|
-
paddingTop: 10,
|
1796
|
-
paddingBottom: 10,
|
1797
|
-
paddingLeft: 10,
|
1798
|
-
paddingRight: 10
|
1799
|
-
},
|
1800
|
-
tablet: {
|
1801
|
-
parent: null,
|
1802
|
-
corner: 10,
|
1803
|
-
left: -30,
|
1804
|
-
borderWidth: 2,
|
1805
|
-
delay: 1e3,
|
1806
|
-
borderColor: "#fed041",
|
1807
|
-
backgroundColor: "#000000",
|
1808
|
-
backgroundColorOpacity: 100,
|
1809
|
-
marginTop: 0,
|
1810
|
-
marginBottom: 0,
|
1811
|
-
marginLeft: 0,
|
1812
|
-
marginRight: 0,
|
1813
|
-
paddingTop: 10,
|
1814
|
-
paddingBottom: 10,
|
1815
|
-
paddingLeft: 10,
|
1816
|
-
paddingRight: 10
|
1817
|
-
},
|
1818
|
-
mobile: {
|
1819
|
-
parent: null,
|
1820
|
-
corner: 10,
|
1821
|
-
left: "-215",
|
1822
|
-
borderWidth: 2,
|
1823
|
-
delay: 1e3,
|
1824
|
-
borderColor: "#fed041",
|
1825
|
-
backgroundColor: "#000000",
|
1826
|
-
backgroundColorOpacity: 100,
|
1827
|
-
marginTop: 0,
|
1828
|
-
marginBottom: 0,
|
1829
|
-
marginLeft: 0,
|
1830
|
-
marginRight: 0,
|
1831
|
-
paddingTop: 10,
|
1832
|
-
paddingBottom: 10,
|
1833
|
-
paddingLeft: 10,
|
1834
|
-
paddingRight: 10
|
1835
|
-
}
|
1836
|
-
},
|
1837
|
-
close: {
|
1838
|
-
desktop: {
|
1839
|
-
parent: null,
|
1840
|
-
color: "#fff"
|
1841
|
-
},
|
1842
|
-
laptop: {
|
1843
|
-
parent: null,
|
1844
|
-
color: "#fff"
|
1845
|
-
},
|
1846
|
-
tablet: {
|
1847
|
-
parent: null,
|
1848
|
-
color: "#fff"
|
1849
|
-
},
|
1850
|
-
mobile: {
|
1851
|
-
parent: null,
|
1852
|
-
color: "#fff"
|
1853
|
-
}
|
1854
|
-
},
|
1855
|
-
text: {
|
1856
|
-
desktop: {
|
1857
|
-
parent: null,
|
1858
|
-
children: "BONO DE PRIMER DEPÓSITO \nDE HASTA {{S/500}}",
|
1859
|
-
typography: {
|
1860
|
-
color: "#ffffff",
|
1861
|
-
fontFamily: "Roboto",
|
1862
|
-
isBold: true,
|
1863
|
-
isItalic: false,
|
1864
|
-
isThrough: false,
|
1865
|
-
textAlign: "left",
|
1866
|
-
fontSize: 11,
|
1867
|
-
lineHeight: 1.2,
|
1868
|
-
letterSpacing: 0
|
1869
|
-
},
|
1870
|
-
accentTypography: {
|
1871
|
-
color: "#fed041",
|
1872
|
-
fontFamily: "Roboto",
|
1873
|
-
isBold: true,
|
1874
|
-
isItalic: false,
|
1875
|
-
isThrough: false,
|
1876
|
-
textAlign: "left",
|
1877
|
-
fontSize: 14,
|
1878
|
-
lineHeight: 1.2,
|
1879
|
-
letterSpacing: 0
|
1880
|
-
}
|
1881
|
-
},
|
1882
|
-
laptop: {
|
1883
|
-
parent: null,
|
1884
|
-
children: "BONO DE PRIMER DEPÓSITO \nDE HASTA {{S/500}}",
|
1885
|
-
typography: {
|
1886
|
-
color: "#ffffff",
|
1887
|
-
fontFamily: "Roboto",
|
1888
|
-
isBold: true,
|
1889
|
-
isItalic: false,
|
1890
|
-
isThrough: false,
|
1891
|
-
textAlign: "left",
|
1892
|
-
fontSize: 11,
|
1893
|
-
lineHeight: 1.2,
|
1894
|
-
letterSpacing: 0
|
1895
|
-
},
|
1896
|
-
accentTypography: {
|
1897
|
-
color: "#fed041",
|
1898
|
-
fontFamily: "Roboto",
|
1899
|
-
isBold: true,
|
1900
|
-
isItalic: false,
|
1901
|
-
isThrough: false,
|
1902
|
-
textAlign: "left",
|
1903
|
-
fontSize: 14,
|
1904
|
-
lineHeight: 1.2,
|
1905
|
-
letterSpacing: 0
|
1906
|
-
}
|
1907
|
-
},
|
1908
|
-
tablet: {
|
1909
|
-
parent: null,
|
1910
|
-
children: "BONO DE PRIMER DEPÓSITO \nDE HASTA {{S/500}}",
|
1911
|
-
typography: {
|
1912
|
-
color: "#ffffff",
|
1913
|
-
fontFamily: "Roboto",
|
1914
|
-
isBold: true,
|
1915
|
-
isItalic: false,
|
1916
|
-
isThrough: false,
|
1917
|
-
textAlign: "left",
|
1918
|
-
fontSize: 11,
|
1919
|
-
lineHeight: 1.2,
|
1920
|
-
letterSpacing: 0
|
1921
|
-
},
|
1922
|
-
accentTypography: {
|
1923
|
-
color: "#fed041",
|
1924
|
-
fontFamily: "Roboto",
|
1925
|
-
isBold: true,
|
1926
|
-
isItalic: false,
|
1927
|
-
isThrough: false,
|
1928
|
-
textAlign: "left",
|
1929
|
-
fontSize: 14,
|
1930
|
-
lineHeight: 1.2,
|
1931
|
-
letterSpacing: 0
|
1932
|
-
}
|
1933
|
-
},
|
1934
|
-
mobile: {
|
1935
|
-
parent: null,
|
1936
|
-
children: "BONO DE PRIMER DEPÓSITO \nDE HASTA {{S/500}}",
|
1937
|
-
typography: {
|
1938
|
-
color: "#ffffff",
|
1939
|
-
fontFamily: "Roboto",
|
1940
|
-
isBold: true,
|
1941
|
-
isItalic: false,
|
1942
|
-
isThrough: false,
|
1943
|
-
textAlign: "left",
|
1944
|
-
fontSize: 11,
|
1945
|
-
lineHeight: 1.2,
|
1946
|
-
letterSpacing: 0
|
1947
|
-
},
|
1948
|
-
accentTypography: {
|
1949
|
-
color: "#fed041",
|
1950
|
-
fontFamily: "Roboto",
|
1951
|
-
isBold: true,
|
1952
|
-
isItalic: false,
|
1953
|
-
isThrough: false,
|
1954
|
-
textAlign: "left",
|
1955
|
-
fontSize: 14,
|
1956
|
-
lineHeight: 1.2,
|
1957
|
-
letterSpacing: 0
|
1958
|
-
}
|
1959
|
-
}
|
1960
|
-
},
|
1961
|
-
button: {
|
1962
|
-
desktop: {
|
1963
|
-
parent: null,
|
1964
|
-
backgroundColor: "#fed041",
|
1965
|
-
backgroundOpacity: "1000000",
|
1966
|
-
borderWidth: "2",
|
1967
|
-
borderColor: "#333",
|
1968
|
-
corner: 10,
|
1969
|
-
isAnimated: true,
|
1970
|
-
children: "ÚNETE AHORA",
|
1971
|
-
color: "#000000",
|
1972
|
-
fontFamily: "Roboto",
|
1973
|
-
isBold: true,
|
1974
|
-
isItalic: false,
|
1975
|
-
isThrough: false,
|
1976
|
-
textAlign: "center",
|
1977
|
-
fontSize: 14,
|
1978
|
-
lineHeight: 2,
|
1979
|
-
letterSpacing: 0,
|
1980
|
-
marginTop: 0,
|
1981
|
-
marginBottom: 0,
|
1982
|
-
marginLeft: 0,
|
1983
|
-
marginRight: 0,
|
1984
|
-
paddingTop: 0,
|
1985
|
-
paddingBottom: 0,
|
1986
|
-
paddingLeft: 0,
|
1987
|
-
paddingRight: 0
|
1988
|
-
},
|
1989
|
-
laptop: {
|
1990
|
-
parent: null,
|
1991
|
-
backgroundColor: "#fed041",
|
1992
|
-
backgroundOpacity: 100,
|
1993
|
-
borderWidth: 0,
|
1994
|
-
borderColor: "#333",
|
1995
|
-
corner: 10,
|
1996
|
-
isAnimated: true,
|
1997
|
-
children: "ÚNETE AHORA",
|
1998
|
-
color: "#000000",
|
1999
|
-
fontFamily: "Roboto",
|
2000
|
-
isBold: true,
|
2001
|
-
isItalic: false,
|
2002
|
-
isThrough: false,
|
2003
|
-
textAlign: "center",
|
2004
|
-
fontSize: 14,
|
2005
|
-
lineHeight: 2,
|
2006
|
-
letterSpacing: 0,
|
2007
|
-
marginTop: 0,
|
2008
|
-
marginBottom: 0,
|
2009
|
-
marginLeft: 0,
|
2010
|
-
marginRight: 0,
|
2011
|
-
paddingTop: 0,
|
2012
|
-
paddingBottom: 0,
|
2013
|
-
paddingLeft: 0,
|
2014
|
-
paddingRight: 0
|
2015
|
-
},
|
2016
|
-
tablet: {
|
2017
|
-
parent: null,
|
2018
|
-
backgroundColor: "#fed041",
|
2019
|
-
backgroundOpacity: 100,
|
2020
|
-
borderWidth: 0,
|
2021
|
-
borderColor: "#333",
|
2022
|
-
corner: 10,
|
2023
|
-
isAnimated: true,
|
2024
|
-
children: "ÚNETE AHORA",
|
2025
|
-
color: "#000000",
|
2026
|
-
fontFamily: "Roboto",
|
2027
|
-
isBold: true,
|
2028
|
-
isItalic: false,
|
2029
|
-
isThrough: false,
|
2030
|
-
textAlign: "center",
|
2031
|
-
fontSize: 14,
|
2032
|
-
lineHeight: 2,
|
2033
|
-
letterSpacing: 0,
|
2034
|
-
marginTop: 0,
|
2035
|
-
marginBottom: 0,
|
2036
|
-
marginLeft: 0,
|
2037
|
-
marginRight: 0,
|
2038
|
-
paddingTop: 0,
|
2039
|
-
paddingBottom: 0,
|
2040
|
-
paddingLeft: 0,
|
2041
|
-
paddingRight: 0
|
2042
|
-
},
|
2043
|
-
mobile: {
|
2044
|
-
parent: null,
|
2045
|
-
backgroundColor: "#fed041",
|
2046
|
-
backgroundOpacity: 100,
|
2047
|
-
borderWidth: 0,
|
2048
|
-
borderColor: "#333",
|
2049
|
-
corner: 10,
|
2050
|
-
isAnimated: true,
|
2051
|
-
children: "ÚNETE AHORA",
|
2052
|
-
color: "#000000",
|
2053
|
-
fontFamily: "Roboto",
|
2054
|
-
isBold: true,
|
2055
|
-
isItalic: false,
|
2056
|
-
isThrough: false,
|
2057
|
-
textAlign: "center",
|
2058
|
-
fontSize: 14,
|
2059
|
-
lineHeight: 2,
|
2060
|
-
letterSpacing: 0,
|
2061
|
-
marginTop: 0,
|
2062
|
-
marginBottom: 0,
|
2063
|
-
marginLeft: 0,
|
2064
|
-
marginRight: 0,
|
2065
|
-
paddingTop: 0,
|
2066
|
-
paddingBottom: 0,
|
2067
|
-
paddingLeft: 0,
|
2068
|
-
paddingRight: 0
|
2069
|
-
}
|
2070
|
-
},
|
2071
|
-
legal: {
|
2072
|
-
desktop: {
|
2073
|
-
parent: null,
|
2074
|
-
backgroundColor: "#002044",
|
2075
|
-
backgroundOpacity: 100,
|
2076
|
-
corner: 10,
|
2077
|
-
borderWidth: 0,
|
2078
|
-
borderColor: "#2ad566",
|
2079
|
-
children: null,
|
2080
|
-
color: "#ffffff",
|
2081
|
-
fontFamily: "Roboto",
|
2082
|
-
isBold: false,
|
2083
|
-
isItalic: false,
|
2084
|
-
isThrough: false,
|
2085
|
-
textAlign: "left",
|
2086
|
-
fontSize: 10,
|
2087
|
-
lineHeight: "1",
|
2088
|
-
letterSpacing: "0",
|
2089
|
-
backgroundColorOpacity: 100,
|
2090
|
-
marginTop: 0,
|
2091
|
-
marginBottom: 0,
|
2092
|
-
marginLeft: 0,
|
2093
|
-
marginRight: 0,
|
2094
|
-
paddingTop: 4,
|
2095
|
-
paddingBottom: 4,
|
2096
|
-
paddingLeft: 5,
|
2097
|
-
paddingRight: 5,
|
2098
|
-
buttonOpenText: "Hide",
|
2099
|
-
buttonHideText: "Show"
|
2100
|
-
},
|
2101
|
-
laptop: {
|
2102
|
-
parent: null,
|
2103
|
-
backgroundColor: "#002044",
|
2104
|
-
backgroundOpacity: 100,
|
2105
|
-
corner: 10,
|
2106
|
-
borderWidth: 0,
|
2107
|
-
borderColor: "#333",
|
2108
|
-
children: null,
|
2109
|
-
color: "#ffffff",
|
2110
|
-
fontFamily: "Roboto",
|
2111
|
-
isBold: false,
|
2112
|
-
isItalic: false,
|
2113
|
-
isThrough: false,
|
2114
|
-
textAlign: "left",
|
2115
|
-
fontSize: 10,
|
2116
|
-
lineHeight: 1.2,
|
2117
|
-
letterSpacing: 0,
|
2118
|
-
backgroundColorOpacity: 100,
|
2119
|
-
marginTop: 0,
|
2120
|
-
marginBottom: 0,
|
2121
|
-
marginLeft: 0,
|
2122
|
-
marginRight: 0,
|
2123
|
-
paddingTop: 4,
|
2124
|
-
paddingBottom: 4,
|
2125
|
-
paddingLeft: 5,
|
2126
|
-
paddingRight: 5,
|
2127
|
-
buttonOpenText: "Hide",
|
2128
|
-
buttonHideText: "Show"
|
2129
|
-
},
|
2130
|
-
tablet: {
|
2131
|
-
parent: null,
|
2132
|
-
backgroundColor: "#002044",
|
2133
|
-
backgroundOpacity: 100,
|
2134
|
-
corner: 10,
|
2135
|
-
borderWidth: 0,
|
2136
|
-
borderColor: "#333",
|
2137
|
-
children: null,
|
2138
|
-
color: "#ffffff",
|
2139
|
-
fontFamily: "Roboto",
|
2140
|
-
isBold: false,
|
2141
|
-
isItalic: false,
|
2142
|
-
isThrough: false,
|
2143
|
-
textAlign: "left",
|
2144
|
-
fontSize: 10,
|
2145
|
-
lineHeight: 1.2,
|
2146
|
-
letterSpacing: 0,
|
2147
|
-
backgroundColorOpacity: 100,
|
2148
|
-
marginTop: 0,
|
2149
|
-
marginBottom: 0,
|
2150
|
-
marginLeft: 0,
|
2151
|
-
marginRight: 0,
|
2152
|
-
paddingTop: 4,
|
2153
|
-
paddingBottom: 4,
|
2154
|
-
paddingLeft: 5,
|
2155
|
-
paddingRight: 5,
|
2156
|
-
buttonOpenText: "Hide",
|
2157
|
-
buttonHideText: "Show"
|
2158
|
-
},
|
2159
|
-
mobile: {
|
2160
|
-
parent: null,
|
2161
|
-
backgroundColor: "#002044",
|
2162
|
-
backgroundOpacity: 100,
|
2163
|
-
corner: 10,
|
2164
|
-
borderWidth: 0,
|
2165
|
-
borderColor: "#333",
|
2166
|
-
children: null,
|
2167
|
-
color: "#ffffff",
|
2168
|
-
fontFamily: "Roboto",
|
2169
|
-
isBold: false,
|
2170
|
-
isItalic: false,
|
2171
|
-
isThrough: false,
|
2172
|
-
textAlign: "left",
|
2173
|
-
fontSize: 10,
|
2174
|
-
lineHeight: 1.2,
|
2175
|
-
letterSpacing: 0,
|
2176
|
-
backgroundColorOpacity: 100,
|
2177
|
-
marginTop: 0,
|
2178
|
-
marginBottom: 0,
|
2179
|
-
marginLeft: 0,
|
2180
|
-
marginRight: 0,
|
2181
|
-
paddingTop: 4,
|
2182
|
-
paddingBottom: 4,
|
2183
|
-
paddingLeft: 5,
|
2184
|
-
paddingRight: 5,
|
2185
|
-
buttonOpenText: "Hide",
|
2186
|
-
buttonHideText: "Show"
|
2187
|
-
}
|
2188
|
-
},
|
2189
|
-
logo: {
|
2190
|
-
desktop: {
|
2191
|
-
parent: null,
|
2192
|
-
minWidth: 60,
|
2193
|
-
height: 15,
|
2194
|
-
corner: 0,
|
2195
|
-
backgroundColor: "#eee",
|
2196
|
-
backgroundColorOpacity: 0,
|
2197
|
-
backgroundImage: "https://cdn.stavka.tv/static/bk/froala/77a/1fa/2a89a3158c589edab1874ae787a8c4a168.png",
|
2198
|
-
backgroundFit: "contain"
|
2199
|
-
},
|
2200
|
-
laptop: {
|
2201
|
-
parent: null,
|
2202
|
-
minWidth: 60,
|
2203
|
-
height: 15,
|
2204
|
-
corner: 0,
|
2205
|
-
backgroundColor: "#eee",
|
2206
|
-
backgroundColorOpacity: 0,
|
2207
|
-
backgroundImage: "https://cdn.stavka.tv/static/bk/froala/77a/1fa/2a89a3158c589edab1874ae787a8c4a168.png",
|
2208
|
-
backgroundFit: "contain"
|
2209
|
-
},
|
2210
|
-
tablet: {
|
2211
|
-
parent: null,
|
2212
|
-
minWidth: 60,
|
2213
|
-
height: 15,
|
2214
|
-
corner: 0,
|
2215
|
-
backgroundColor: "#eee",
|
2216
|
-
backgroundColorOpacity: 0,
|
2217
|
-
backgroundImage: "https://cdn.stavka.tv/static/bk/froala/77a/1fa/2a89a3158c589edab1874ae787a8c4a168.png",
|
2218
|
-
backgroundFit: "contain"
|
2219
|
-
},
|
2220
|
-
mobile: {
|
2221
|
-
parent: null,
|
2222
|
-
minWidth: 60,
|
2223
|
-
height: 15,
|
2224
|
-
corner: 0,
|
2225
|
-
backgroundColor: "#eee",
|
2226
|
-
backgroundColorOpacity: 0,
|
2227
|
-
backgroundImage: "https://cdn.stavka.tv/static/bk/froala/77a/1fa/2a89a3158c589edab1874ae787a8c4a168.png",
|
2228
|
-
backgroundFit: "contain"
|
2229
|
-
}
|
2230
|
-
},
|
2231
|
-
icon: {
|
2232
|
-
desktop: {
|
2233
|
-
parent: null,
|
2234
|
-
hasIcon: true,
|
2235
|
-
animations: ["gradient"],
|
2236
|
-
gradientColor: "#fed041",
|
2237
|
-
borderWidth: 0,
|
2238
|
-
borderColor: "#f82525",
|
2239
|
-
backgroundColor: "#000000",
|
2240
|
-
backgroundColorOpacity: 100
|
2241
|
-
},
|
2242
|
-
laptop: {
|
2243
|
-
parent: null,
|
2244
|
-
hasIcon: true,
|
2245
|
-
animations: ["gradient"],
|
2246
|
-
gradientColor: "#fed041",
|
2247
|
-
borderWidth: 0,
|
2248
|
-
borderColor: "#fff",
|
2249
|
-
backgroundColor: "#000000",
|
2250
|
-
backgroundColorOpacity: 100
|
2251
|
-
},
|
2252
|
-
tablet: {
|
2253
|
-
parent: null,
|
2254
|
-
hasIcon: true,
|
2255
|
-
animations: ["gradient"],
|
2256
|
-
gradientColor: "#fed041",
|
2257
|
-
borderWidth: 0,
|
2258
|
-
borderColor: "#fff",
|
2259
|
-
backgroundColor: "#000000",
|
2260
|
-
backgroundColorOpacity: 100
|
2261
|
-
},
|
2262
|
-
mobile: {
|
2263
|
-
parent: null,
|
2264
|
-
hasIcon: true,
|
2265
|
-
animations: ["gradient"],
|
2266
|
-
gradientColor: "#fed041",
|
2267
|
-
borderWidth: 0,
|
2268
|
-
borderColor: "#fff",
|
2269
|
-
backgroundColor: "#000000",
|
2270
|
-
backgroundColorOpacity: 100
|
2271
|
-
}
|
2272
|
-
}
|
2273
|
-
};
|
2274
1722
|
const SimpleGift = () => {
|
2275
1723
|
var _a, _b, _c, _d, _e, _f, _g;
|
2276
1724
|
const rootRef = _$1(null);
|
@@ -2298,8 +1746,6 @@
|
|
2298
1746
|
gradient: styles$d.gradient
|
2299
1747
|
});
|
2300
1748
|
useExtractFonts(deviceState);
|
2301
|
-
const newState = modifyState(data, "container", "left", (prev) => +prev + 20, ["mobile"]);
|
2302
|
-
console.log(newState.container.mobile.left);
|
2303
1749
|
return o("div", {
|
2304
1750
|
className: styles$d.root,
|
2305
1751
|
ref: rootRef,
|
@@ -2408,16 +1854,16 @@
|
|
2408
1854
|
gradient,
|
2409
1855
|
wiggle
|
2410
1856
|
};
|
2411
|
-
const root$b = "
|
2412
|
-
const body$4 = "
|
2413
|
-
const bodyInner = "
|
2414
|
-
const line = "
|
2415
|
-
const text$3 = "
|
2416
|
-
const button$5 = "
|
2417
|
-
const logo$5 = "
|
2418
|
-
const variant2$1 = "
|
2419
|
-
const buttonText = "
|
2420
|
-
const legal$4 = "
|
1857
|
+
const root$b = "_root_5vnui_1";
|
1858
|
+
const body$4 = "_body_5vnui_30";
|
1859
|
+
const bodyInner = "_bodyInner_5vnui_38";
|
1860
|
+
const line = "_line_5vnui_43";
|
1861
|
+
const text$3 = "_text_5vnui_53";
|
1862
|
+
const button$5 = "_button_5vnui_69";
|
1863
|
+
const logo$5 = "_logo_5vnui_81";
|
1864
|
+
const variant2$1 = "_variant2_5vnui_87";
|
1865
|
+
const buttonText = "_buttonText_5vnui_91";
|
1866
|
+
const legal$4 = "_legal_5vnui_107";
|
2421
1867
|
const styles$b = {
|
2422
1868
|
root: root$b,
|
2423
1869
|
body: body$4,
|
@@ -2480,7 +1926,7 @@
|
|
2480
1926
|
});
|
2481
1927
|
};
|
2482
1928
|
const ComplexGift = () => {
|
2483
|
-
var _a, _b;
|
1929
|
+
var _a, _b, _c;
|
2484
1930
|
const rootRef = _$1(null);
|
2485
1931
|
const {
|
2486
1932
|
isOpen,
|
@@ -2504,6 +1950,7 @@
|
|
2504
1950
|
wiggle: styles$c.wiggle,
|
2505
1951
|
gradient: styles$c.gradient
|
2506
1952
|
});
|
1953
|
+
const hasTitleIcon = (_a = rules == null ? void 0 : rules.title) == null ? void 0 : _a.hasIcon;
|
2507
1954
|
return o("div", {
|
2508
1955
|
ref: rootRef,
|
2509
1956
|
className: styles$c.root,
|
@@ -2534,16 +1981,17 @@
|
|
2534
1981
|
}), o("div", {
|
2535
1982
|
className: styles$c.promotion,
|
2536
1983
|
style: rules.promotion,
|
2537
|
-
children: (
|
1984
|
+
children: (_b = rules.promotion) == null ? void 0 : _b.children
|
2538
1985
|
}), o("div", {
|
2539
1986
|
className: styles$c.head,
|
2540
|
-
|
2541
|
-
children: [o("div", {
|
1987
|
+
children: [hasTitleIcon && o("div", {
|
2542
1988
|
className: styles$c.headIcon,
|
1989
|
+
style: pick(rules.title, "color"),
|
2543
1990
|
children: o(GiftIcon, {})
|
2544
1991
|
}), o("div", {
|
2545
1992
|
className: styles$c.headTitle,
|
2546
|
-
|
1993
|
+
style: rules.title,
|
1994
|
+
children: (_c = rules.title) == null ? void 0 : _c.children
|
2547
1995
|
})]
|
2548
1996
|
}), o("div", {
|
2549
1997
|
className: styles$c.inner,
|
@@ -3413,4 +2861,4 @@
|
|
3413
2861
|
exports2.modifyState = modifyState;
|
3414
2862
|
Object.defineProperty(exports2, Symbol.toStringTag, { value: "Module" });
|
3415
2863
|
});
|
3416
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLnVtZC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2hvb2tzL2Rpc3QvaG9va3MubW9kdWxlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9jb21wYXQvZGlzdC9jb21wYXQubW9kdWxlLmpzIiwiLi4vc3JjL2hvb2tzL3VzZUdpZnRPcGVuLnRzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9qc3gtcnVudGltZS9kaXN0L2pzeFJ1bnRpbWUubW9kdWxlLmpzIiwiLi4vc3JjL1N0YXRlQ29udGV4dC50c3giLCIuLi9zcmMvaGVscGVycy9yZW5kZXIudHN4IiwiLi4vc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZS50cyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUNsZWFyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9lcS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc29jSW5kZXhPZi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUdldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUhhcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0xpc3RDYWNoZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0RlbGV0ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrR2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tIYXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mcmVlR2xvYmFsLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcm9vdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N5bWJvbC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFJhd1RhZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX29iamVjdFRvU3RyaW5nLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldFRhZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRnVuY3Rpb24uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3JlSnNEYXRhLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNNYXNrZWQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b1NvdXJjZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc05hdGl2ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFZhbHVlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TmF0aXZlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaENsZWFyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaERlbGV0ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hHZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoSGFzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaFNldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUNsZWFyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNLZXlhYmxlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWFwRGF0YS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVHZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUhhcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwQ2FjaGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja1NldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N0YWNrLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZGVmaW5lUHJvcGVydHkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduVmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hc3NpZ25NZXJnZVZhbHVlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQmFzZUZvci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGb3IuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUJ1ZmZlci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1VpbnQ4QXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUFycmF5QnVmZmVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVUeXBlZEFycmF5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weUFycmF5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUNyZWF0ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJBcmcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRQcm90b3R5cGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc1Byb3RvdHlwZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2luaXRDbG9uZU9iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzQXJndW1lbnRzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FyZ3VtZW50cy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZU9iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkZhbHNlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0J1ZmZlci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNQbGFpbk9iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1R5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5hcnkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19ub2RlVXRpbC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNUeXBlZEFycmF5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2FmZUdldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc2lnblZhbHVlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weU9iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUaW1lcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUxpa2VLZXlzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlS2V5c0luLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUtleXNJbi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5c0luLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b1BsYWluT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1lcmdlRGVlcC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VNZXJnZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaWRlbnRpdHkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJSZXN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9jb25zdGFudC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTZXRUb1N0cmluZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Nob3J0T3V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9TdHJpbmcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUmVzdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSXRlcmF0ZWVDYWxsLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQXNzaWduZXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL21lcmdlLmpzIiwiLi4vLi4vdXRpbHMvZG9tLnRzIiwiLi4vLi4vdXRpbHMvaXRlcmF0b3IudHMiLCIuLi8uLi91dGlscy9pbmRleC50cyIsIi4uL3NyYy9oZWxwZXJzL2dldERldmljZVN0YXRlLnRzIiwiLi4vc3JjL2hvb2tzL3VzZURldmljZVN0YXRlLnRzIiwiLi4vc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZS50cyIsIi4uL3NyYy9oZWxwZXJzL3BhcnNlUnVsZXMudHMiLCIuLi9zcmMvaG9va3MvdXNlUGFyc2VSdWxlcy50cyIsIi4uL3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0LnRzeCIsIi4uL3NyYy9ob29rcy91c2VUb2dnbGUudHMiLCIuLi9zcmMvY29tcG9uZW50cy9DbG9zZUljb24udHN4IiwiLi4vc3JjL2NvbXBvbmVudHMvR2lmdEljb24udHN4IiwiLi4vc3JjL2hvb2tzL3Byb21vcy91c2VHaWZ0UnVsZXMudHMiLCIuLi9zcmMvaGVscGVycy9jb25zdGFudHMudHMiLCIuLi9zcmMvaG9va3MvdXNlTWV0cmljcy50cyIsIi4uL3NyYy9ob29rcy91c2VFeHRyYWN0Rm9udHMudHMiLCIuLi9zcmMvcHJvbW9zL1NpbXBsZUdpZnQvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9Db21wbGV4R2lmdC9jb21wb25lbnRzL0JvbnVzQ2FyZC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0NvbXBsZXhHaWZ0L2luZGV4LnRzeCIsIi4uL3NyYy9oZWxwZXJzL3N3aXRjaFRleHRBbGlnblRvRmxleC50cyIsIi4uL3NyYy9wcm9tb3MvU2ltcGxlUG9wdXAvY29tcG9uZW50cy9saW5lL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvU2ltcGxlUG9wdXAvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9Db21wbGV4UG9wdXAvY29tcG9uZW50cy9Cb251cy9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0NvbXBsZXhQb3B1cC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0V4cHJlc3NQb3B1cC9jb21wb25lbnRzL01hdGNoL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvRXhwcmVzc1BvcHVwL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvQm9udXNDYXJkL2NvbXBvbmVudHMvQm9udXMvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9Cb251c0NhcmQvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9XaWRlQ2FyZC9jb21wb25lbnRzL1RleHQvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9XaWRlQ2FyZC9jb21wb25lbnRzL01hdGNoZXMvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9XaWRlQ2FyZC9jb21wb25lbnRzL01hdGNoZXNPbmVUd28vaW5kZXgudHN4IiwiLi4vc3JjL2hvb2tzL3VzZUFuaW1hdGVkTGlzdC50cyIsIi4uL3NyYy9wcm9tb3MvV2lkZUNhcmQvaW5kZXgudHN4IiwiLi4vc3JjL2hlbHBlcnMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyohXG5cdENvcHlyaWdodCAoYykgMjAxOCBKZWQgV2F0c29uLlxuXHRMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxuXHRodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXG4qL1xuLyogZ2xvYmFsIGRlZmluZSAqL1xuXG4oZnVuY3Rpb24gKCkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXHR2YXIgbmF0aXZlQ29kZVN0cmluZyA9ICdbbmF0aXZlIGNvZGVdJztcblxuXHRmdW5jdGlvbiBjbGFzc05hbWVzKCkge1xuXHRcdHZhciBjbGFzc2VzID0gW107XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGlmICghYXJnKSBjb250aW51ZTtcblxuXHRcdFx0dmFyIGFyZ1R5cGUgPSB0eXBlb2YgYXJnO1xuXG5cdFx0XHRpZiAoYXJnVHlwZSA9PT0gJ3N0cmluZycgfHwgYXJnVHlwZSA9PT0gJ251bWJlcicpIHtcblx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGFyZyk7XG5cdFx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuXHRcdFx0XHRpZiAoYXJnLmxlbmd0aCkge1xuXHRcdFx0XHRcdHZhciBpbm5lciA9IGNsYXNzTmFtZXMuYXBwbHkobnVsbCwgYXJnKTtcblx0XHRcdFx0XHRpZiAoaW5uZXIpIHtcblx0XHRcdFx0XHRcdGNsYXNzZXMucHVzaChpbm5lcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGFyZ1R5cGUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdGlmIChhcmcudG9TdHJpbmcgIT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgJiYgIWFyZy50b1N0cmluZy50b1N0cmluZygpLmluY2x1ZGVzKCdbbmF0aXZlIGNvZGVdJykpIHtcblx0XHRcdFx0XHRjbGFzc2VzLnB1c2goYXJnLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xuXHRcdFx0XHRcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcblx0XHRcdFx0XHRcdGNsYXNzZXMucHVzaChrZXkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcblx0fVxuXG5cdGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRcdGNsYXNzTmFtZXMuZGVmYXVsdCA9IGNsYXNzTmFtZXM7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyByZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBucG0gcGFja2FnZSBuYW1lXG5cdFx0ZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcblx0fVxufSgpKTtcbiIsImltcG9ydHtvcHRpb25zIGFzIG59ZnJvbVwicHJlYWN0XCI7dmFyIHQscix1LGksbz0wLGY9W10sYz1bXSxlPW4uX19iLGE9bi5fX3Isdj1uLmRpZmZlZCxsPW4uX19jLG09bi51bm1vdW50O2Z1bmN0aW9uIGQodCx1KXtuLl9faCYmbi5fX2gocix0LG98fHUpLG89MDt2YXIgaT1yLl9fSHx8KHIuX19IPXtfXzpbXSxfX2g6W119KTtyZXR1cm4gdD49aS5fXy5sZW5ndGgmJmkuX18ucHVzaCh7X19WOmN9KSxpLl9fW3RdfWZ1bmN0aW9uIGgobil7cmV0dXJuIG89MSxzKEIsbil9ZnVuY3Rpb24gcyhuLHUsaSl7dmFyIG89ZCh0KyssMik7aWYoby50PW4sIW8uX19jJiYoby5fXz1baT9pKHUpOkIodm9pZCAwLHUpLGZ1bmN0aW9uKG4pe3ZhciB0PW8uX19OP28uX19OWzBdOm8uX19bMF0scj1vLnQodCxuKTt0IT09ciYmKG8uX19OPVtyLG8uX19bMV1dLG8uX19jLnNldFN0YXRlKHt9KSl9XSxvLl9fYz1yLCFyLnUpKXt2YXIgZj1mdW5jdGlvbihuLHQscil7aWYoIW8uX19jLl9fSClyZXR1cm4hMDt2YXIgdT1vLl9fYy5fX0guX18uZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBuLl9fY30pO2lmKHUuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIW4uX19OfSkpcmV0dXJuIWN8fGMuY2FsbCh0aGlzLG4sdCxyKTt2YXIgaT0hMTtyZXR1cm4gdS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKG4uX19OKXt2YXIgdD1uLl9fWzBdO24uX189bi5fX04sbi5fX049dm9pZCAwLHQhPT1uLl9fWzBdJiYoaT0hMCl9fSksISghaSYmby5fX2MucHJvcHM9PT1uKSYmKCFjfHxjLmNhbGwodGhpcyxuLHQscikpfTtyLnU9ITA7dmFyIGM9ci5zaG91bGRDb21wb25lbnRVcGRhdGUsZT1yLmNvbXBvbmVudFdpbGxVcGRhdGU7ci5jb21wb25lbnRXaWxsVXBkYXRlPWZ1bmN0aW9uKG4sdCxyKXtpZih0aGlzLl9fZSl7dmFyIHU9YztjPXZvaWQgMCxmKG4sdCxyKSxjPXV9ZSYmZS5jYWxsKHRoaXMsbix0LHIpfSxyLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mfXJldHVybiBvLl9fTnx8by5fX31mdW5jdGlvbiBwKHUsaSl7dmFyIG89ZCh0KyssMyk7IW4uX19zJiZ6KG8uX19ILGkpJiYoby5fXz11LG8uaT1pLHIuX19ILl9faC5wdXNoKG8pKX1mdW5jdGlvbiB5KHUsaSl7dmFyIG89ZCh0KyssNCk7IW4uX19zJiZ6KG8uX19ILGkpJiYoby5fXz11LG8uaT1pLHIuX19oLnB1c2gobykpfWZ1bmN0aW9uIF8obil7cmV0dXJuIG89NSxGKGZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bn19LFtdKX1mdW5jdGlvbiBBKG4sdCxyKXtvPTYseShmdW5jdGlvbigpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIG4/KG4odCgpKSxmdW5jdGlvbigpe3JldHVybiBuKG51bGwpfSk6bj8obi5jdXJyZW50PXQoKSxmdW5jdGlvbigpe3JldHVybiBuLmN1cnJlbnQ9bnVsbH0pOnZvaWQgMH0sbnVsbD09cj9yOnIuY29uY2F0KG4pKX1mdW5jdGlvbiBGKG4scil7dmFyIHU9ZCh0KyssNyk7cmV0dXJuIHoodS5fX0gscik/KHUuX19WPW4oKSx1Lmk9cix1Ll9faD1uLHUuX19WKTp1Ll9ffWZ1bmN0aW9uIFQobix0KXtyZXR1cm4gbz04LEYoZnVuY3Rpb24oKXtyZXR1cm4gbn0sdCl9ZnVuY3Rpb24gcShuKXt2YXIgdT1yLmNvbnRleHRbbi5fX2NdLGk9ZCh0KyssOSk7cmV0dXJuIGkuYz1uLHU/KG51bGw9PWkuX18mJihpLl9fPSEwLHUuc3ViKHIpKSx1LnByb3BzLnZhbHVlKTpuLl9ffWZ1bmN0aW9uIHgodCxyKXtuLnVzZURlYnVnVmFsdWUmJm4udXNlRGVidWdWYWx1ZShyP3IodCk6dCl9ZnVuY3Rpb24gUChuKXt2YXIgdT1kKHQrKywxMCksaT1oKCk7cmV0dXJuIHUuX189bixyLmNvbXBvbmVudERpZENhdGNofHwoci5jb21wb25lbnREaWRDYXRjaD1mdW5jdGlvbihuLHQpe3UuX18mJnUuX18obix0KSxpWzFdKG4pfSksW2lbMF0sZnVuY3Rpb24oKXtpWzFdKHZvaWQgMCl9XX1mdW5jdGlvbiBWKCl7dmFyIG49ZCh0KyssMTEpO2lmKCFuLl9fKXtmb3IodmFyIHU9ci5fX3Y7bnVsbCE9PXUmJiF1Ll9fbSYmbnVsbCE9PXUuX187KXU9dS5fXzt2YXIgaT11Ll9fbXx8KHUuX19tPVswLDBdKTtuLl9fPVwiUFwiK2lbMF0rXCItXCIraVsxXSsrfXJldHVybiBuLl9ffWZ1bmN0aW9uIGIoKXtmb3IodmFyIHQ7dD1mLnNoaWZ0KCk7KWlmKHQuX19QJiZ0Ll9fSCl0cnl7dC5fX0guX19oLmZvckVhY2goayksdC5fX0guX19oLmZvckVhY2godyksdC5fX0guX19oPVtdfWNhdGNoKHIpe3QuX19ILl9faD1bXSxuLl9fZShyLHQuX192KX19bi5fX2I9ZnVuY3Rpb24obil7cj1udWxsLGUmJmUobil9LG4uX19yPWZ1bmN0aW9uKG4pe2EmJmEobiksdD0wO3ZhciBpPShyPW4uX19jKS5fX0g7aSYmKHU9PT1yPyhpLl9faD1bXSxyLl9faD1bXSxpLl9fLmZvckVhY2goZnVuY3Rpb24obil7bi5fX04mJihuLl9fPW4uX19OKSxuLl9fVj1jLG4uX19OPW4uaT12b2lkIDB9KSk6KGkuX19oLmZvckVhY2goayksaS5fX2guZm9yRWFjaCh3KSxpLl9faD1bXSkpLHU9cn0sbi5kaWZmZWQ9ZnVuY3Rpb24odCl7diYmdih0KTt2YXIgbz10Ll9fYztvJiZvLl9fSCYmKG8uX19ILl9faC5sZW5ndGgmJigxIT09Zi5wdXNoKG8pJiZpPT09bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fCgoaT1uLnJlcXVlc3RBbmltYXRpb25GcmFtZSl8fGopKGIpKSxvLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKG4pe24uaSYmKG4uX19IPW4uaSksbi5fX1YhPT1jJiYobi5fXz1uLl9fViksbi5pPXZvaWQgMCxuLl9fVj1jfSkpLHU9cj1udWxsfSxuLl9fYz1mdW5jdGlvbih0LHIpe3Iuc29tZShmdW5jdGlvbih0KXt0cnl7dC5fX2guZm9yRWFjaChrKSx0Ll9faD10Ll9faC5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIW4uX198fHcobil9KX1jYXRjaCh1KXtyLnNvbWUoZnVuY3Rpb24obil7bi5fX2gmJihuLl9faD1bXSl9KSxyPVtdLG4uX19lKHUsdC5fX3YpfX0pLGwmJmwodCxyKX0sbi51bm1vdW50PWZ1bmN0aW9uKHQpe20mJm0odCk7dmFyIHIsdT10Ll9fYzt1JiZ1Ll9fSCYmKHUuX19ILl9fLmZvckVhY2goZnVuY3Rpb24obil7dHJ5e2sobil9Y2F0Y2gobil7cj1ufX0pLHUuX19IPXZvaWQgMCxyJiZuLl9fZShyLHUuX192KSl9O3ZhciBnPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZTtmdW5jdGlvbiBqKG4pe3ZhciB0LHI9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodSksZyYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodCksc2V0VGltZW91dChuKX0sdT1zZXRUaW1lb3V0KHIsMTAwKTtnJiYodD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocikpfWZ1bmN0aW9uIGsobil7dmFyIHQ9cix1PW4uX19jO1wiZnVuY3Rpb25cIj09dHlwZW9mIHUmJihuLl9fYz12b2lkIDAsdSgpKSxyPXR9ZnVuY3Rpb24gdyhuKXt2YXIgdD1yO24uX19jPW4uX18oKSxyPXR9ZnVuY3Rpb24geihuLHQpe3JldHVybiFufHxuLmxlbmd0aCE9PXQubGVuZ3RofHx0LnNvbWUoZnVuY3Rpb24odCxyKXtyZXR1cm4gdCE9PW5bcl19KX1mdW5jdGlvbiBCKG4sdCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdD90KG4pOnR9ZXhwb3J0e1QgYXMgdXNlQ2FsbGJhY2sscSBhcyB1c2VDb250ZXh0LHggYXMgdXNlRGVidWdWYWx1ZSxwIGFzIHVzZUVmZmVjdCxQIGFzIHVzZUVycm9yQm91bmRhcnksViBhcyB1c2VJZCxBIGFzIHVzZUltcGVyYXRpdmVIYW5kbGUseSBhcyB1c2VMYXlvdXRFZmZlY3QsRiBhcyB1c2VNZW1vLHMgYXMgdXNlUmVkdWNlcixfIGFzIHVzZVJlZixoIGFzIHVzZVN0YXRlfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhvb2tzLm1vZHVsZS5qcy5tYXBcbiIsImltcG9ydHtDb21wb25lbnQgYXMgbixjcmVhdGVFbGVtZW50IGFzIHQsb3B0aW9ucyBhcyBlLHRvQ2hpbGRBcnJheSBhcyByLEZyYWdtZW50IGFzIHUscmVuZGVyIGFzIG8saHlkcmF0ZSBhcyBpLGNyZWF0ZUNvbnRleHQgYXMgbCxjcmVhdGVSZWYgYXMgYyxjbG9uZUVsZW1lbnQgYXMgZn1mcm9tXCJwcmVhY3RcIjtleHBvcnR7Q29tcG9uZW50LEZyYWdtZW50LGNyZWF0ZUNvbnRleHQsY3JlYXRlRWxlbWVudCxjcmVhdGVSZWZ9ZnJvbVwicHJlYWN0XCI7aW1wb3J0e3VzZVN0YXRlIGFzIGEsdXNlSWQgYXMgcyx1c2VSZWR1Y2VyIGFzIGgsdXNlRWZmZWN0IGFzIHYsdXNlTGF5b3V0RWZmZWN0IGFzIGQsdXNlUmVmIGFzIHAsdXNlSW1wZXJhdGl2ZUhhbmRsZSBhcyBtLHVzZU1lbW8gYXMgeSx1c2VDYWxsYmFjayBhcyBfLHVzZUNvbnRleHQgYXMgYix1c2VEZWJ1Z1ZhbHVlIGFzIFN9ZnJvbVwicHJlYWN0L2hvb2tzXCI7ZXhwb3J0KmZyb21cInByZWFjdC9ob29rc1wiO2Z1bmN0aW9uIGcobix0KXtmb3IodmFyIGUgaW4gdCluW2VdPXRbZV07cmV0dXJuIG59ZnVuY3Rpb24gQyhuLHQpe2Zvcih2YXIgZSBpbiBuKWlmKFwiX19zb3VyY2VcIiE9PWUmJiEoZSBpbiB0KSlyZXR1cm4hMDtmb3IodmFyIHIgaW4gdClpZihcIl9fc291cmNlXCIhPT1yJiZuW3JdIT09dFtyXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBFKG4sdCl7cmV0dXJuIG49PT10JiYoMCE9PW58fDEvbj09MS90KXx8biE9biYmdCE9dH1mdW5jdGlvbiB3KG4pe3RoaXMucHJvcHM9bn1mdW5jdGlvbiB4KG4sZSl7ZnVuY3Rpb24gcihuKXt2YXIgdD10aGlzLnByb3BzLnJlZixyPXQ9PW4ucmVmO3JldHVybiFyJiZ0JiYodC5jYWxsP3QobnVsbCk6dC5jdXJyZW50PW51bGwpLGU/IWUodGhpcy5wcm9wcyxuKXx8IXI6Qyh0aGlzLnByb3BzLG4pfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPXIsdChuLGUpfXJldHVybiB1LmRpc3BsYXlOYW1lPVwiTWVtbyhcIisobi5kaXNwbGF5TmFtZXx8bi5uYW1lKStcIilcIix1LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLHUuX19mPSEwLHV9KHcucHJvdG90eXBlPW5ldyBuKS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCx3LnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gQyh0aGlzLnByb3BzLG4pfHxDKHRoaXMuc3RhdGUsdCl9O3ZhciBSPWUuX19iO2UuX19iPWZ1bmN0aW9uKG4pe24udHlwZSYmbi50eXBlLl9fZiYmbi5yZWYmJihuLnByb3BzLnJlZj1uLnJlZixuLnJlZj1udWxsKSxSJiZSKG4pfTt2YXIgTj1cInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIil8fDM5MTE7ZnVuY3Rpb24gayhuKXtmdW5jdGlvbiB0KHQpe3ZhciBlPWcoe30sdCk7cmV0dXJuIGRlbGV0ZSBlLnJlZixuKGUsdC5yZWZ8fG51bGwpfXJldHVybiB0LiQkdHlwZW9mPU4sdC5yZW5kZXI9dCx0LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXQuX19mPSEwLHQuZGlzcGxheU5hbWU9XCJGb3J3YXJkUmVmKFwiKyhuLmRpc3BsYXlOYW1lfHxuLm5hbWUpK1wiKVwiLHR9dmFyIEE9ZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbD09bj9udWxsOnIocihuKS5tYXAodCkpfSxPPXttYXA6QSxmb3JFYWNoOkEsY291bnQ6ZnVuY3Rpb24obil7cmV0dXJuIG4/cihuKS5sZW5ndGg6MH0sb25seTpmdW5jdGlvbihuKXt2YXIgdD1yKG4pO2lmKDEhPT10Lmxlbmd0aCl0aHJvd1wiQ2hpbGRyZW4ub25seVwiO3JldHVybiB0WzBdfSx0b0FycmF5OnJ9LFQ9ZS5fX2U7ZS5fX2U9ZnVuY3Rpb24obix0LGUscil7aWYobi50aGVuKWZvcih2YXIgdSxvPXQ7bz1vLl9fOylpZigodT1vLl9fYykmJnUuX19jKXJldHVybiBudWxsPT10Ll9fZSYmKHQuX19lPWUuX19lLHQuX19rPWUuX19rKSx1Ll9fYyhuLHQpO1Qobix0LGUscil9O3ZhciBJPWUudW5tb3VudDtmdW5jdGlvbiBMKG4sdCxlKXtyZXR1cm4gbiYmKG4uX19jJiZuLl9fYy5fX0gmJihuLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihuKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLl9fYyYmbi5fX2MoKX0pLG4uX19jLl9fSD1udWxsKSxudWxsIT0obj1nKHt9LG4pKS5fX2MmJihuLl9fYy5fX1A9PT1lJiYobi5fX2MuX19QPXQpLG4uX19jPW51bGwpLG4uX19rPW4uX19rJiZuLl9fay5tYXAoZnVuY3Rpb24obil7cmV0dXJuIEwobix0LGUpfSkpLG59ZnVuY3Rpb24gVShuLHQsZSl7cmV0dXJuIG4mJihuLl9fdj1udWxsLG4uX19rPW4uX19rJiZuLl9fay5tYXAoZnVuY3Rpb24obil7cmV0dXJuIFUobix0LGUpfSksbi5fX2MmJm4uX19jLl9fUD09PXQmJihuLl9fZSYmZS5pbnNlcnRCZWZvcmUobi5fX2Usbi5fX2QpLG4uX19jLl9fZT0hMCxuLl9fYy5fX1A9ZSkpLG59ZnVuY3Rpb24gRCgpe3RoaXMuX191PTAsdGhpcy50PW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBGKG4pe3ZhciB0PW4uX18uX19jO3JldHVybiB0JiZ0Ll9fYSYmdC5fX2Eobil9ZnVuY3Rpb24gTShuKXt2YXIgZSxyLHU7ZnVuY3Rpb24gbyhvKXtpZihlfHwoZT1uKCkpLnRoZW4oZnVuY3Rpb24obil7cj1uLmRlZmF1bHR8fG59LGZ1bmN0aW9uKG4pe3U9bn0pLHUpdGhyb3cgdTtpZighcil0aHJvdyBlO3JldHVybiB0KHIsbyl9cmV0dXJuIG8uZGlzcGxheU5hbWU9XCJMYXp5XCIsby5fX2Y9ITAsb31mdW5jdGlvbiBWKCl7dGhpcy51PW51bGwsdGhpcy5vPW51bGx9ZS51bm1vdW50PWZ1bmN0aW9uKG4pe3ZhciB0PW4uX19jO3QmJnQuX19SJiZ0Ll9fUigpLHQmJiEwPT09bi5fX2gmJihuLnR5cGU9bnVsbCksSSYmSShuKX0sKEQucHJvdG90eXBlPW5ldyBuKS5fX2M9ZnVuY3Rpb24obix0KXt2YXIgZT10Ll9fYyxyPXRoaXM7bnVsbD09ci50JiYoci50PVtdKSxyLnQucHVzaChlKTt2YXIgdT1GKHIuX192KSxvPSExLGk9ZnVuY3Rpb24oKXtvfHwobz0hMCxlLl9fUj1udWxsLHU/dShsKTpsKCkpfTtlLl9fUj1pO3ZhciBsPWZ1bmN0aW9uKCl7aWYoIS0tci5fX3Upe2lmKHIuc3RhdGUuX19hKXt2YXIgbj1yLnN0YXRlLl9fYTtyLl9fdi5fX2tbMF09VShuLG4uX19jLl9fUCxuLl9fYy5fX08pfXZhciB0O2ZvcihyLnNldFN0YXRlKHtfX2E6ci5fX2I9bnVsbH0pO3Q9ci50LnBvcCgpOyl0LmZvcmNlVXBkYXRlKCl9fSxjPSEwPT09dC5fX2g7ci5fX3UrK3x8Y3x8ci5zZXRTdGF0ZSh7X19hOnIuX19iPXIuX192Ll9fa1swXX0pLG4udGhlbihpLGkpfSxELnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMudD1bXX0sRC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKG4sZSl7aWYodGhpcy5fX2Ipe2lmKHRoaXMuX192Ll9fayl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxvPXRoaXMuX192Ll9fa1swXS5fX2M7dGhpcy5fX3YuX19rWzBdPUwodGhpcy5fX2IscixvLl9fTz1vLl9fUCl9dGhpcy5fX2I9bnVsbH12YXIgaT1lLl9fYSYmdCh1LG51bGwsbi5mYWxsYmFjayk7cmV0dXJuIGkmJihpLl9faD1udWxsKSxbdCh1LG51bGwsZS5fX2E/bnVsbDpuLmNoaWxkcmVuKSxpXX07dmFyIFc9ZnVuY3Rpb24obix0LGUpe2lmKCsrZVsxXT09PWVbMF0mJm4uby5kZWxldGUodCksbi5wcm9wcy5yZXZlYWxPcmRlciYmKFwidFwiIT09bi5wcm9wcy5yZXZlYWxPcmRlclswXXx8IW4uby5zaXplKSlmb3IoZT1uLnU7ZTspe2Zvcig7ZS5sZW5ndGg+MzspZS5wb3AoKSgpO2lmKGVbMV08ZVswXSlicmVhaztuLnU9ZT1lWzJdfX07ZnVuY3Rpb24gUChuKXtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbi5jb250ZXh0fSxuLmNoaWxkcmVufWZ1bmN0aW9uIGoobil7dmFyIGU9dGhpcyxyPW4uaTtlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7byhudWxsLGUubCksZS5sPW51bGwsZS5pPW51bGx9LGUuaSYmZS5pIT09ciYmZS5jb21wb25lbnRXaWxsVW5tb3VudCgpLG4uX192PyhlLmx8fChlLmk9cixlLmw9e25vZGVUeXBlOjEscGFyZW50Tm9kZTpyLGNoaWxkTm9kZXM6W10sYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24obil7dGhpcy5jaGlsZE5vZGVzLnB1c2gobiksZS5pLmFwcGVuZENoaWxkKG4pfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24obix0KXt0aGlzLmNoaWxkTm9kZXMucHVzaChuKSxlLmkuYXBwZW5kQ2hpbGQobil9LHJlbW92ZUNoaWxkOmZ1bmN0aW9uKG4pe3RoaXMuY2hpbGROb2Rlcy5zcGxpY2UodGhpcy5jaGlsZE5vZGVzLmluZGV4T2Yobik+Pj4xLDEpLGUuaS5yZW1vdmVDaGlsZChuKX19KSxvKHQoUCx7Y29udGV4dDplLmNvbnRleHR9LG4uX192KSxlLmwpKTplLmwmJmUuY29tcG9uZW50V2lsbFVubW91bnQoKX1mdW5jdGlvbiB6KG4sZSl7dmFyIHI9dChqLHtfX3Y6bixpOmV9KTtyZXR1cm4gci5jb250YWluZXJJbmZvPWUscn0oVi5wcm90b3R5cGU9bmV3IG4pLl9fYT1mdW5jdGlvbihuKXt2YXIgdD10aGlzLGU9Rih0Ll9fdikscj10Lm8uZ2V0KG4pO3JldHVybiByWzBdKyssZnVuY3Rpb24odSl7dmFyIG89ZnVuY3Rpb24oKXt0LnByb3BzLnJldmVhbE9yZGVyPyhyLnB1c2godSksVyh0LG4scikpOnUoKX07ZT9lKG8pOm8oKX19LFYucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihuKXt0aGlzLnU9bnVsbCx0aGlzLm89bmV3IE1hcDt2YXIgdD1yKG4uY2hpbGRyZW4pO24ucmV2ZWFsT3JkZXImJlwiYlwiPT09bi5yZXZlYWxPcmRlclswXSYmdC5yZXZlcnNlKCk7Zm9yKHZhciBlPXQubGVuZ3RoO2UtLTspdGhpcy5vLnNldCh0W2VdLHRoaXMudT1bMSwwLHRoaXMudV0pO3JldHVybiBuLmNoaWxkcmVufSxWLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9Vi5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgbj10aGlzO3RoaXMuby5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7VyhuLGUsdCl9KX07dmFyIEI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIil8fDYwMTAzLEg9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sWj0vXm9uKEFuaXxUcmF8VG91fEJlZm9yZUlucHxDb21wbykvLFk9L1tBLVowLTldL2csJD1cInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQscT1mdW5jdGlvbihuKXtyZXR1cm4oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbCgpPy9maWx8Y2hlfHJhZC86L2ZpbHxjaGV8cmEvKS50ZXN0KG4pfTtmdW5jdGlvbiBHKG4sdCxlKXtyZXR1cm4gbnVsbD09dC5fX2smJih0LnRleHRDb250ZW50PVwiXCIpLG8obix0KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlKCksbj9uLl9fYzpudWxsfWZ1bmN0aW9uIEoobix0LGUpe3JldHVybiBpKG4sdCksXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmZSgpLG4/bi5fX2M6bnVsbH1uLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9LFtcImNvbXBvbmVudFdpbGxNb3VudFwiLFwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1wiLFwiY29tcG9uZW50V2lsbFVwZGF0ZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbXCJVTlNBRkVfXCIrdF19LHNldDpmdW5jdGlvbihuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bn0pfX0pfSk7dmFyIEs9ZS5ldmVudDtmdW5jdGlvbiBRKCl7fWZ1bmN0aW9uIFgoKXtyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGV9ZnVuY3Rpb24gbm4oKXtyZXR1cm4gdGhpcy5kZWZhdWx0UHJldmVudGVkfWUuZXZlbnQ9ZnVuY3Rpb24obil7cmV0dXJuIEsmJihuPUsobikpLG4ucGVyc2lzdD1RLG4uaXNQcm9wYWdhdGlvblN0b3BwZWQ9WCxuLmlzRGVmYXVsdFByZXZlbnRlZD1ubixuLm5hdGl2ZUV2ZW50PW59O3ZhciB0bixlbj17ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxybj1lLnZub2RlO2Uudm5vZGU9ZnVuY3Rpb24obil7XCJzdHJpbmdcIj09dHlwZW9mIG4udHlwZSYmZnVuY3Rpb24obil7dmFyIHQ9bi5wcm9wcyxlPW4udHlwZSx1PXt9O2Zvcih2YXIgbyBpbiB0KXt2YXIgaT10W29dO2lmKCEoXCJ2YWx1ZVwiPT09byYmXCJkZWZhdWx0VmFsdWVcImluIHQmJm51bGw9PWl8fCQmJlwiY2hpbGRyZW5cIj09PW8mJlwibm9zY3JpcHRcIj09PWV8fFwiY2xhc3NcIj09PW98fFwiY2xhc3NOYW1lXCI9PT1vKSl7dmFyIGw9by50b0xvd2VyQ2FzZSgpO1wiZGVmYXVsdFZhbHVlXCI9PT1vJiZcInZhbHVlXCJpbiB0JiZudWxsPT10LnZhbHVlP289XCJ2YWx1ZVwiOlwiZG93bmxvYWRcIj09PW8mJiEwPT09aT9pPVwiXCI6XCJvbmRvdWJsZWNsaWNrXCI9PT1sP289XCJvbmRibGNsaWNrXCI6XCJvbmNoYW5nZVwiIT09bHx8XCJpbnB1dFwiIT09ZSYmXCJ0ZXh0YXJlYVwiIT09ZXx8cSh0LnR5cGUpP1wib25mb2N1c1wiPT09bD9vPVwib25mb2N1c2luXCI6XCJvbmJsdXJcIj09PWw/bz1cIm9uZm9jdXNvdXRcIjpaLnRlc3Qobyk/bz1sOi0xPT09ZS5pbmRleE9mKFwiLVwiKSYmSC50ZXN0KG8pP289by5yZXBsYWNlKFksXCItJCZcIikudG9Mb3dlckNhc2UoKTpudWxsPT09aSYmKGk9dm9pZCAwKTpsPW89XCJvbmlucHV0XCIsXCJvbmlucHV0XCI9PT1sJiZ1W289bF0mJihvPVwib25pbnB1dENhcHR1cmVcIiksdVtvXT1pfX1cInNlbGVjdFwiPT1lJiZ1Lm11bHRpcGxlJiZBcnJheS5pc0FycmF5KHUudmFsdWUpJiYodS52YWx1ZT1yKHQuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24obil7bi5wcm9wcy5zZWxlY3RlZD0tMSE9dS52YWx1ZS5pbmRleE9mKG4ucHJvcHMudmFsdWUpfSkpLFwic2VsZWN0XCI9PWUmJm51bGwhPXUuZGVmYXVsdFZhbHVlJiYodS52YWx1ZT1yKHQuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24obil7bi5wcm9wcy5zZWxlY3RlZD11Lm11bHRpcGxlPy0xIT11LmRlZmF1bHRWYWx1ZS5pbmRleE9mKG4ucHJvcHMudmFsdWUpOnUuZGVmYXVsdFZhbHVlPT1uLnByb3BzLnZhbHVlfSkpLHQuY2xhc3MmJiF0LmNsYXNzTmFtZT8odS5jbGFzcz10LmNsYXNzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LFwiY2xhc3NOYW1lXCIsZW4pKToodC5jbGFzc05hbWUmJiF0LmNsYXNzfHx0LmNsYXNzJiZ0LmNsYXNzTmFtZSkmJih1LmNsYXNzPXUuY2xhc3NOYW1lPXQuY2xhc3NOYW1lKSxuLnByb3BzPXV9KG4pLG4uJCR0eXBlb2Y9QixybiYmcm4obil9O3ZhciB1bj1lLl9fcjtlLl9fcj1mdW5jdGlvbihuKXt1biYmdW4obiksdG49bi5fX2N9O3ZhciBvbj1lLmRpZmZlZDtlLmRpZmZlZD1mdW5jdGlvbihuKXtvbiYmb24obik7dmFyIHQ9bi5wcm9wcyxlPW4uX19lO251bGwhPWUmJlwidGV4dGFyZWFcIj09PW4udHlwZSYmXCJ2YWx1ZVwiaW4gdCYmdC52YWx1ZSE9PWUudmFsdWUmJihlLnZhbHVlPW51bGw9PXQudmFsdWU/XCJcIjp0LnZhbHVlKSx0bj1udWxsfTt2YXIgbG49e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6e2N1cnJlbnQ6e3JlYWRDb250ZXh0OmZ1bmN0aW9uKG4pe3JldHVybiB0bi5fX25bbi5fX2NdLnByb3BzLnZhbHVlfX19fSxjbj1cIjE3LjAuMlwiO2Z1bmN0aW9uIGZuKG4pe3JldHVybiB0LmJpbmQobnVsbCxuKX1mdW5jdGlvbiBhbihuKXtyZXR1cm4hIW4mJm4uJCR0eXBlb2Y9PT1CfWZ1bmN0aW9uIHNuKG4pe3JldHVybiBhbihuKT9mLmFwcGx5KG51bGwsYXJndW1lbnRzKTpufWZ1bmN0aW9uIGhuKG4pe3JldHVybiEhbi5fX2smJihvKG51bGwsbiksITApfWZ1bmN0aW9uIHZuKG4pe3JldHVybiBuJiYobi5iYXNlfHwxPT09bi5ub2RlVHlwZSYmbil8fG51bGx9dmFyIGRuPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4odCl9LHBuPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4odCl9LG1uPXU7ZnVuY3Rpb24geW4obil7bigpfWZ1bmN0aW9uIF9uKG4pe3JldHVybiBufWZ1bmN0aW9uIGJuKCl7cmV0dXJuWyExLHluXX12YXIgU249ZDtmdW5jdGlvbiBnbihuLHQpe3ZhciBlPXQoKSxyPWEoe2g6e19fOmUsdjp0fX0pLHU9clswXS5oLG89clsxXTtyZXR1cm4gZChmdW5jdGlvbigpe3UuX189ZSx1LnY9dCxFKHUuX18sdCgpKXx8byh7aDp1fSl9LFtuLGUsdF0pLHYoZnVuY3Rpb24oKXtyZXR1cm4gRSh1Ll9fLHUudigpKXx8byh7aDp1fSksbihmdW5jdGlvbigpe0UodS5fXyx1LnYoKSl8fG8oe2g6dX0pfSl9LFtuXSksZX12YXIgQ249e3VzZVN0YXRlOmEsdXNlSWQ6cyx1c2VSZWR1Y2VyOmgsdXNlRWZmZWN0OnYsdXNlTGF5b3V0RWZmZWN0OmQsdXNlSW5zZXJ0aW9uRWZmZWN0OlNuLHVzZVRyYW5zaXRpb246Ym4sdXNlRGVmZXJyZWRWYWx1ZTpfbix1c2VTeW5jRXh0ZXJuYWxTdG9yZTpnbixzdGFydFRyYW5zaXRpb246eW4sdXNlUmVmOnAsdXNlSW1wZXJhdGl2ZUhhbmRsZTptLHVzZU1lbW86eSx1c2VDYWxsYmFjazpfLHVzZUNvbnRleHQ6Yix1c2VEZWJ1Z1ZhbHVlOlMsdmVyc2lvbjpcIjE3LjAuMlwiLENoaWxkcmVuOk8scmVuZGVyOkcsaHlkcmF0ZTpKLHVubW91bnRDb21wb25lbnRBdE5vZGU6aG4sY3JlYXRlUG9ydGFsOnosY3JlYXRlRWxlbWVudDp0LGNyZWF0ZUNvbnRleHQ6bCxjcmVhdGVGYWN0b3J5OmZuLGNsb25lRWxlbWVudDpzbixjcmVhdGVSZWY6YyxGcmFnbWVudDp1LGlzVmFsaWRFbGVtZW50OmFuLGZpbmRET01Ob2RlOnZuLENvbXBvbmVudDpuLFB1cmVDb21wb25lbnQ6dyxtZW1vOngsZm9yd2FyZFJlZjprLGZsdXNoU3luYzpwbix1bnN0YWJsZV9iYXRjaGVkVXBkYXRlczpkbixTdHJpY3RNb2RlOm1uLFN1c3BlbnNlOkQsU3VzcGVuc2VMaXN0OlYsbGF6eTpNLF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEOmxufTtleHBvcnR7TyBhcyBDaGlsZHJlbix3IGFzIFB1cmVDb21wb25lbnQsbW4gYXMgU3RyaWN0TW9kZSxEIGFzIFN1c3BlbnNlLFYgYXMgU3VzcGVuc2VMaXN0LGxuIGFzIF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELHNuIGFzIGNsb25lRWxlbWVudCxmbiBhcyBjcmVhdGVGYWN0b3J5LHogYXMgY3JlYXRlUG9ydGFsLENuIGFzIGRlZmF1bHQsdm4gYXMgZmluZERPTU5vZGUscG4gYXMgZmx1c2hTeW5jLGsgYXMgZm9yd2FyZFJlZixKIGFzIGh5ZHJhdGUsYW4gYXMgaXNWYWxpZEVsZW1lbnQsTSBhcyBsYXp5LHggYXMgbWVtbyxHIGFzIHJlbmRlcix5biBhcyBzdGFydFRyYW5zaXRpb24saG4gYXMgdW5tb3VudENvbXBvbmVudEF0Tm9kZSxkbiBhcyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyxfbiBhcyB1c2VEZWZlcnJlZFZhbHVlLFNuIGFzIHVzZUluc2VydGlvbkVmZmVjdCxnbiBhcyB1c2VTeW5jRXh0ZXJuYWxTdG9yZSxibiBhcyB1c2VUcmFuc2l0aW9uLGNuIGFzIHZlcnNpb259O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tcGF0Lm1vZHVsZS5qcy5tYXBcbiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5cbmV4cG9ydCBjb25zdCB1c2VHaWZ0T3BlbiA9IChkZWxheSA9IDEwMDApID0+IHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCB0aW1lclJlZiA9IHVzZVJlZihudWxsKVxuXG4gIGNvbnN0IG9uVG9nZ2xlID0gKCkgPT4ge1xuICAgIGNsZWFyVGltZW91dCh0aW1lclJlZi5jdXJyZW50KVxuICAgIHNldElzT3BlbihwcmV2ID0+ICFwcmV2KVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICB0aW1lclJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZXRJc09wZW4odHJ1ZSlcbiAgICB9LCBkZWxheSlcblxuICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodGltZXJSZWYuY3VycmVudClcbiAgfSwgW2RlbGF5XSlcblxuICByZXR1cm4ge1xuICAgIGlzT3BlbixcbiAgICBvblRvZ2dsZVxuICB9XG59XG4iLCJpbXBvcnR7b3B0aW9ucyBhcyByfWZyb21cInByZWFjdFwiO2V4cG9ydHtGcmFnbWVudH1mcm9tXCJwcmVhY3RcIjt2YXIgXz0wO2Z1bmN0aW9uIG8obyxlLG4sdCxmLGwpe3ZhciBzLHUsYT17fTtmb3IodSBpbiBlKVwicmVmXCI9PXU/cz1lW3VdOmFbdV09ZVt1XTt2YXIgaT17dHlwZTpvLHByb3BzOmEsa2V5Om4scmVmOnMsX19rOm51bGwsX186bnVsbCxfX2I6MCxfX2U6bnVsbCxfX2Q6dm9pZCAwLF9fYzpudWxsLF9faDpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6LS1fLF9fc291cmNlOmYsX19zZWxmOmx9O2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG8mJihzPW8uZGVmYXVsdFByb3BzKSlmb3IodSBpbiBzKXZvaWQgMD09PWFbdV0mJihhW3VdPXNbdV0pO3JldHVybiByLnZub2RlJiZyLnZub2RlKGkpLGl9ZXhwb3J0e28gYXMganN4LG8gYXMganN4REVWLG8gYXMganN4c307XG4vLyMgc291cmNlTWFwcGluZ1VSTD1qc3hSdW50aW1lLm1vZHVsZS5qcy5tYXBcbiIsImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdwcmVhY3QnXG5cbmV4cG9ydCBjb25zdCBTdGF0ZSA9IGNyZWF0ZUNvbnRleHQoKVxuXG5jb25zdCBTdGF0ZUNvbnRleHQgPSAoeyBjaGlsZHJlbiwgdmFsdWUgfSkgPT4ge1xuICByZXR1cm4gPFN0YXRlLlByb3ZpZGVyIHZhbHVlPXt2YWx1ZX0+e2NoaWxkcmVufTwvU3RhdGUuUHJvdmlkZXI+XG59XG5cbmV4cG9ydCBkZWZhdWx0IFN0YXRlQ29udGV4dFxuIiwiaW1wb3J0IHsgQ29tcG9uZW50Q2hpbGQsIENvbnRhaW5lck5vZGUsIHJlbmRlciBhcyBwcmVhY3RSZW5kZXIgfSBmcm9tICdwcmVhY3QnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJy4uL1N0YXRlQ29udGV4dCdcblxuZXhwb3J0IGNvbnN0IHJlbmRlciA9ICh2Tm9kZTogQ29tcG9uZW50Q2hpbGQpID0+ICh0YXJnZXQ6IENvbnRhaW5lck5vZGUsIHN0YXRlPzogYW55KSA9PlxuICBwcmVhY3RSZW5kZXIoPFN0YXRlQ29udGV4dCB2YWx1ZT17c3RhdGV9Pnt2Tm9kZX08L1N0YXRlQ29udGV4dD4sIHRhcmdldCBhcyBIVE1MRWxlbWVudClcbiIsImltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuaW1wb3J0IHsgU3RhdGUgfSBmcm9tIFwiLi4vU3RhdGVDb250ZXh0XCI7XG5cbmV4cG9ydCBjb25zdCB1c2VDdXJyZW50U3RhdGUgPSA8VFZhbHVlID0gdW5rbm93bj4oKSA9PiB1c2VDb250ZXh0PFRWYWx1ZT4oU3RhdGUpXG4iLCIvKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlQ2xlYXI7XG4iLCIvKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcTtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NvY0luZGV4T2Y7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTtcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgIGRhdGEucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICB9XG4gIC0tdGhpcy5zaXplO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVEZWxldGU7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlR2V0O1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVIYXM7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbGlzdCBjYWNoZSBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgKyt0aGlzLnNpemU7XG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0gZWxzZSB7XG4gICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVTZXQ7XG4iLCJ2YXIgbGlzdENhY2hlQ2xlYXIgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVDbGVhcicpLFxuICAgIGxpc3RDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZURlbGV0ZScpLFxuICAgIGxpc3RDYWNoZUdldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUdldCcpLFxuICAgIGxpc3RDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUhhcycpLFxuICAgIGxpc3RDYWNoZVNldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZVNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gbGlzdCBjYWNoZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIExpc3RDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxuTGlzdENhY2hlLnByb3RvdHlwZS5jbGVhciA9IGxpc3RDYWNoZUNsZWFyO1xuTGlzdENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBsaXN0Q2FjaGVEZWxldGU7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmdldCA9IGxpc3RDYWNoZUdldDtcbkxpc3RDYWNoZS5wcm90b3R5cGUuaGFzID0gbGlzdENhY2hlSGFzO1xuTGlzdENhY2hlLnByb3RvdHlwZS5zZXQgPSBsaXN0Q2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTGlzdENhY2hlO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIFN0YWNrXG4gKi9cbmZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrQ2xlYXI7XG4iLCIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgcmVzdWx0ID0gZGF0YVsnZGVsZXRlJ10oa2V5KTtcblxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tEZWxldGU7XG4iLCIvKipcbiAqIEdldHMgdGhlIHN0YWNrIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzdGFja0dldChrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tHZXQ7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBhIHN0YWNrIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tIYXMoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrSGFzO1xuIiwiLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmcmVlR2xvYmFsO1xuIiwidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxubW9kdWxlLmV4cG9ydHMgPSByb290O1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbDtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFJhd1RhZztcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgdXNpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9iamVjdFRvU3RyaW5nO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGdldFJhd1RhZyA9IHJlcXVpcmUoJy4vX2dldFJhd1RhZycpLFxuICAgIG9iamVjdFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fb2JqZWN0VG9TdHJpbmcnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgfVxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldFRhZztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0O1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGdW5jdGlvbjtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcmVKc0RhdGE7XG4iLCJ2YXIgY29yZUpzRGF0YSA9IHJlcXVpcmUoJy4vX2NvcmVKc0RhdGEnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc01hc2tlZDtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1NvdXJjZTtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNNYXNrZWQgPSByZXF1aXJlKCcuL19pc01hc2tlZCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCBpc01hc2tlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHBhdHRlcm4gPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYXRpdmU7XG4iLCIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRWYWx1ZTtcbiIsInZhciBiYXNlSXNOYXRpdmUgPSByZXF1aXJlKCcuL19iYXNlSXNOYXRpdmUnKSxcbiAgICBnZXRWYWx1ZSA9IHJlcXVpcmUoJy4vX2dldFZhbHVlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TmF0aXZlO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcDtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVDcmVhdGU7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKi9cbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIFRoZSBoYXNoIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gdGhpcy5oYXMoa2V5KSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXldO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaERlbGV0ZTtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hHZXQ7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgaGFzaCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoSGFzO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XG4gIGRhdGFba2V5XSA9IChuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoU2V0O1xuIiwidmFyIGhhc2hDbGVhciA9IHJlcXVpcmUoJy4vX2hhc2hDbGVhcicpLFxuICAgIGhhc2hEZWxldGUgPSByZXF1aXJlKCcuL19oYXNoRGVsZXRlJyksXG4gICAgaGFzaEdldCA9IHJlcXVpcmUoJy4vX2hhc2hHZXQnKSxcbiAgICBoYXNoSGFzID0gcmVxdWlyZSgnLi9faGFzaEhhcycpLFxuICAgIGhhc2hTZXQgPSByZXF1aXJlKCcuL19oYXNoU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEhhc2g7XG4iLCJ2YXIgSGFzaCA9IHJlcXVpcmUoJy4vX0hhc2gnKSxcbiAgICBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlQ2xlYXI7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXlhYmxlO1xuIiwidmFyIGlzS2V5YWJsZSA9IHJlcXVpcmUoJy4vX2lzS2V5YWJsZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWFwRGF0YTtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZURlbGV0ZTtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVHZXQ7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUhhcztcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVTZXQ7XG4iLCJ2YXIgbWFwQ2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX21hcENhY2hlQ2xlYXInKSxcbiAgICBtYXBDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX21hcENhY2hlRGVsZXRlJyksXG4gICAgbWFwQ2FjaGVHZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZUdldCcpLFxuICAgIG1hcENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVIYXMnKSxcbiAgICBtYXBDYWNoZVNldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcENhY2hlO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBTZXRzIHRoZSBzdGFjayBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBzdGFjayBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTGlzdENhY2hlKSB7XG4gICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcbiAgICBpZiAoIU1hcCB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XG4gICAgICBwYWlycy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICB0aGlzLnNpemUgPSArK2RhdGEuc2l6ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZShwYWlycyk7XG4gIH1cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tTZXQ7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgc3RhY2tDbGVhciA9IHJlcXVpcmUoJy4vX3N0YWNrQ2xlYXInKSxcbiAgICBzdGFja0RlbGV0ZSA9IHJlcXVpcmUoJy4vX3N0YWNrRGVsZXRlJyksXG4gICAgc3RhY2tHZXQgPSByZXF1aXJlKCcuL19zdGFja0dldCcpLFxuICAgIHN0YWNrSGFzID0gcmVxdWlyZSgnLi9fc3RhY2tIYXMnKSxcbiAgICBzdGFja1NldCA9IHJlcXVpcmUoJy4vX3N0YWNrU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0YWNrIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFN0YWNrKGVudHJpZXMpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZShlbnRyaWVzKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxuU3RhY2sucHJvdG90eXBlLmNsZWFyID0gc3RhY2tDbGVhcjtcblN0YWNrLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBzdGFja0RlbGV0ZTtcblN0YWNrLnByb3RvdHlwZS5nZXQgPSBzdGFja0dldDtcblN0YWNrLnByb3RvdHlwZS5oYXMgPSBzdGFja0hhcztcblN0YWNrLnByb3RvdHlwZS5zZXQgPSBzdGFja1NldDtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGFjaztcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydHk7XG4iLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gKiB2YWx1ZSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ25WYWx1ZTtcbiIsInZhciBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFzc2lnblZhbHVlYCBleGNlcHQgdGhhdCBpdCBkb2Vzbid0IGFzc2lnblxuICogYHVuZGVmaW5lZGAgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmICgodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZXEob2JqZWN0W2tleV0sIHZhbHVlKSkgfHxcbiAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XG4gICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NpZ25NZXJnZVZhbHVlO1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgYmFzZSBmdW5jdGlvbiBmb3IgbWV0aG9kcyBsaWtlIGBfLmZvckluYCBhbmQgYF8uZm9yT3duYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBiYXNlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVCYXNlRm9yKGZyb21SaWdodCkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBpdGVyYXRlZSwga2V5c0Z1bmMpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgaXRlcmFibGUgPSBPYmplY3Qob2JqZWN0KSxcbiAgICAgICAgcHJvcHMgPSBrZXlzRnVuYyhvYmplY3QpLFxuICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIHZhciBrZXkgPSBwcm9wc1tmcm9tUmlnaHQgPyBsZW5ndGggOiArK2luZGV4XTtcbiAgICAgIGlmIChpdGVyYXRlZShpdGVyYWJsZVtrZXldLCBrZXksIGl0ZXJhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQmFzZUZvcjtcbiIsInZhciBjcmVhdGVCYXNlRm9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQmFzZUZvcicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBiYXNlRm9yT3duYCB3aGljaCBpdGVyYXRlcyBvdmVyIGBvYmplY3RgXG4gKiBwcm9wZXJ0aWVzIHJldHVybmVkIGJ5IGBrZXlzRnVuY2AgYW5kIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xudmFyIGJhc2VGb3IgPSBjcmVhdGVCYXNlRm9yKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZvcjtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgICBhbGxvY1Vuc2FmZSA9IEJ1ZmZlciA/IEJ1ZmZlci5hbGxvY1Vuc2FmZSA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgIGBidWZmZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyIFRoZSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge0J1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gY2xvbmVCdWZmZXIoYnVmZmVyLCBpc0RlZXApIHtcbiAgaWYgKGlzRGVlcCkge1xuICAgIHJldHVybiBidWZmZXIuc2xpY2UoKTtcbiAgfVxuICB2YXIgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IGFsbG9jVW5zYWZlID8gYWxsb2NVbnNhZmUobGVuZ3RoKSA6IG5ldyBidWZmZXIuY29uc3RydWN0b3IobGVuZ3RoKTtcblxuICBidWZmZXIuY29weShyZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lQnVmZmVyO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFVpbnQ4QXJyYXkgPSByb290LlVpbnQ4QXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gVWludDhBcnJheTtcbiIsInZhciBVaW50OEFycmF5ID0gcmVxdWlyZSgnLi9fVWludDhBcnJheScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgYXJyYXlCdWZmZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5QnVmZmVyfSBhcnJheUJ1ZmZlciBUaGUgYXJyYXkgYnVmZmVyIHRvIGNsb25lLlxuICogQHJldHVybnMge0FycmF5QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYXJyYXkgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUFycmF5QnVmZmVyKGFycmF5QnVmZmVyKSB7XG4gIHZhciByZXN1bHQgPSBuZXcgYXJyYXlCdWZmZXIuY29uc3RydWN0b3IoYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCk7XG4gIG5ldyBVaW50OEFycmF5KHJlc3VsdCkuc2V0KG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVBcnJheUJ1ZmZlcjtcbiIsInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgdHlwZWRBcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSB0eXBlZEFycmF5IFRoZSB0eXBlZCBhcnJheSB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgdHlwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNsb25lVHlwZWRBcnJheSh0eXBlZEFycmF5LCBpc0RlZXApIHtcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIodHlwZWRBcnJheS5idWZmZXIpIDogdHlwZWRBcnJheS5idWZmZXI7XG4gIHJldHVybiBuZXcgdHlwZWRBcnJheS5jb25zdHJ1Y3RvcihidWZmZXIsIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5sZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lVHlwZWRBcnJheTtcbiIsIi8qKlxuICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5PVtdXSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgdG8uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gY29weUFycmF5KHNvdXJjZSwgYXJyYXkpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuXG4gIGFycmF5IHx8IChhcnJheSA9IEFycmF5KGxlbmd0aCkpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlBcnJheTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jcmVhdGVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYXNzaWduaW5nXG4gKiBwcm9wZXJ0aWVzIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqL1xudmFyIGJhc2VDcmVhdGUgPSAoZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIG9iamVjdCgpIHt9XG4gIHJldHVybiBmdW5jdGlvbihwcm90bykge1xuICAgIGlmICghaXNPYmplY3QocHJvdG8pKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGlmIChvYmplY3RDcmVhdGUpIHtcbiAgICAgIHJldHVybiBvYmplY3RDcmVhdGUocHJvdG8pO1xuICAgIH1cbiAgICBvYmplY3QucHJvdG90eXBlID0gcHJvdG87XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBvYmplY3Q7XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQ3JlYXRlO1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3ZlckFyZztcbiIsInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBnZXRQcm90b3R5cGUgPSBvdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRQcm90b3R5cGU7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQcm90b3R5cGU7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xuICByZXR1cm4gKHR5cGVvZiBvYmplY3QuY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNQcm90b3R5cGUob2JqZWN0KSlcbiAgICA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpXG4gICAgOiB7fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVPYmplY3Q7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBhcmdzVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0FyZ3VtZW50cztcbiIsInZhciBiYXNlSXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL19iYXNlSXNBcmd1bWVudHMnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhbiBgYXJndW1lbnRzYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcmd1bWVudHMgPSBiYXNlSXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPyBiYXNlSXNBcmd1bWVudHMgOiBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnY2FsbGVlJykgJiZcbiAgICAhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0FyZ3VtZW50cztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXk7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNMZW5ndGg7XG4iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZTtcbiIsInZhciBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNBcnJheUxpa2VgIGV4Y2VwdCB0aGF0IGl0IGFsc28gY2hlY2tzIGlmIGB2YWx1ZWBcbiAqIGlzIGFuIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheS1saWtlIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZU9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBpc0FycmF5TGlrZSh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheUxpa2VPYmplY3Q7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkZhbHNlO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290JyksXG4gICAgc3R1YkZhbHNlID0gcmVxdWlyZSgnLi9zdHViRmFsc2UnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVJc0J1ZmZlciA9IEJ1ZmZlciA/IEJ1ZmZlci5pc0J1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIoMikpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IFVpbnQ4QXJyYXkoMikpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQnVmZmVyO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gaW5mZXIgdGhlIGBPYmplY3RgIGNvbnN0cnVjdG9yLiAqL1xudmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGF0IGlzLCBhbiBvYmplY3QgY3JlYXRlZCBieSB0aGVcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuOC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiB9XG4gKlxuICogXy5pc1BsYWluT2JqZWN0KG5ldyBGb28pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSB8fCBiYXNlR2V0VGFnKHZhbHVlKSAhPSBvYmplY3RUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHByb3RvID0gZ2V0UHJvdG90eXBlKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIEN0b3IgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCAnY29uc3RydWN0b3InKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiZcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUGxhaW5PYmplY3Q7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXG52YXIgdHlwZWRBcnJheVRhZ3MgPSB7fTtcbnR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDhUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xudHlwZWRBcnJheVRhZ3NbYXJnc1RhZ10gPSB0eXBlZEFycmF5VGFnc1thcnJheVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZXJyb3JUYWddID0gdHlwZWRBcnJheVRhZ3NbZnVuY1RhZ10gPVxudHlwZWRBcnJheVRhZ3NbbWFwVGFnXSA9IHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbc2V0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3N0cmluZ1RhZ10gPVxudHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1R5cGVkQXJyYXlgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJlxuICAgIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tiYXNlR2V0VGFnKHZhbHVlKV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzVHlwZWRBcnJheTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5hcnk7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlUHJvY2VzcyA9IG1vZHVsZUV4cG9ydHMgJiYgZnJlZUdsb2JhbC5wcm9jZXNzO1xuXG4vKiogVXNlZCB0byBhY2Nlc3MgZmFzdGVyIE5vZGUuanMgaGVscGVycy4gKi9cbnZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICAvLyBVc2UgYHV0aWwudHlwZXNgIGZvciBOb2RlLmpzIDEwKy5cbiAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWlyZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztcblxuICAgIGlmICh0eXBlcykge1xuICAgICAgcmV0dXJuIHR5cGVzO1xuICAgIH1cblxuICAgIC8vIExlZ2FjeSBgcHJvY2Vzcy5iaW5kaW5nKCd1dGlsJylgIGZvciBOb2RlLmpzIDwgMTAuXG4gICAgcmV0dXJuIGZyZWVQcm9jZXNzICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcgJiYgZnJlZVByb2Nlc3MuYmluZGluZygndXRpbCcpO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBub2RlVXRpbDtcbiIsInZhciBiYXNlSXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fYmFzZUlzVHlwZWRBcnJheScpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNUeXBlZEFycmF5O1xuIiwiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCwgdW5sZXNzIGBrZXlgIGlzIFwiX19wcm90b19fXCIgb3IgXCJjb25zdHJ1Y3RvclwiLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc2FmZUdldChvYmplY3QsIGtleSkge1xuICBpZiAoa2V5ID09PSAnY29uc3RydWN0b3InICYmIHR5cGVvZiBvYmplY3Rba2V5XSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gb2JqZWN0W2tleV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2FmZUdldDtcbiIsInZhciBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBc3NpZ25zIGB2YWx1ZWAgdG8gYGtleWAgb2YgYG9iamVjdGAgaWYgdGhlIGV4aXN0aW5nIHZhbHVlIGlzIG5vdCBlcXVpdmFsZW50XG4gKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XTtcbiAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgZXEob2JqVmFsdWUsIHZhbHVlKSkgfHxcbiAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XG4gICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NpZ25WYWx1ZTtcbiIsInZhciBhc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Fzc2lnblZhbHVlJyksXG4gICAgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyk7XG5cbi8qKlxuICogQ29waWVzIHByb3BlcnRpZXMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycyB0byBjb3B5LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29waWVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlPYmplY3Qoc291cmNlLCBwcm9wcywgb2JqZWN0LCBjdXN0b21pemVyKSB7XG4gIHZhciBpc05ldyA9ICFvYmplY3Q7XG4gIG9iamVjdCB8fCAob2JqZWN0ID0ge30pO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHByb3BzW2luZGV4XTtcblxuICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICAgID8gY3VzdG9taXplcihvYmplY3Rba2V5XSwgc291cmNlW2tleV0sIGtleSwgb2JqZWN0LCBzb3VyY2UpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXdWYWx1ZSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgICBpZiAoaXNOZXcpIHtcbiAgICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlPYmplY3Q7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUaW1lcztcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG52YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuXG4gIHJldHVybiAhIWxlbmd0aCAmJlxuICAgICh0eXBlID09ICdudW1iZXInIHx8XG4gICAgICAodHlwZSAhPSAnc3ltYm9sJyAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkpICYmXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0luZGV4O1xuIiwidmFyIGJhc2VUaW1lcyA9IHJlcXVpcmUoJy4vX2Jhc2VUaW1lcycpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUxpa2VLZXlzO1xuIiwiLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VcbiAqIFtgT2JqZWN0LmtleXNgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGV4Y2VwdCB0aGF0IGl0IGluY2x1ZGVzIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnRpZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIG5hdGl2ZUtleXNJbihvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBpZiAob2JqZWN0ICE9IG51bGwpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlS2V5c0luO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzSW4gPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzSW4nKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXNJbihvYmplY3QpO1xuICB9XG4gIHZhciBpc1Byb3RvID0gaXNQcm90b3R5cGUob2JqZWN0KSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5c0luO1xuIiwidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXNJbiA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzSW4nKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5c0luKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCwgdHJ1ZSkgOiBiYXNlS2V5c0luKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c0luO1xuIiwidmFyIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgcGxhaW4gb2JqZWN0IGZsYXR0ZW5pbmcgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nXG4gKiBrZXllZCBwcm9wZXJ0aWVzIG9mIGB2YWx1ZWAgdG8gb3duIHByb3BlcnRpZXMgb2YgdGhlIHBsYWluIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBwbGFpbiBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8uYXNzaWduKHsgJ2EnOiAxIH0sIG5ldyBGb28pO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gKlxuICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgXy50b1BsYWluT2JqZWN0KG5ldyBGb28pKTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMyB9XG4gKi9cbmZ1bmN0aW9uIHRvUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGNvcHlPYmplY3QodmFsdWUsIGtleXNJbih2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvUGxhaW5PYmplY3Q7XG4iLCJ2YXIgYXNzaWduTWVyZ2VWYWx1ZSA9IHJlcXVpcmUoJy4vX2Fzc2lnbk1lcmdlVmFsdWUnKSxcbiAgICBjbG9uZUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQnVmZmVyJyksXG4gICAgY2xvbmVUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fY2xvbmVUeXBlZEFycmF5JyksXG4gICAgY29weUFycmF5ID0gcmVxdWlyZSgnLi9fY29weUFycmF5JyksXG4gICAgaW5pdENsb25lT2JqZWN0ID0gcmVxdWlyZSgnLi9faW5pdENsb25lT2JqZWN0JyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQXJyYXlMaWtlT2JqZWN0ID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZU9iamVjdCcpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1BsYWluT2JqZWN0ID0gcmVxdWlyZSgnLi9pc1BsYWluT2JqZWN0JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKSxcbiAgICBzYWZlR2V0ID0gcmVxdWlyZSgnLi9fc2FmZUdldCcpLFxuICAgIHRvUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuL3RvUGxhaW5PYmplY3QnKTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VNZXJnZWAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xuICogZGVlcCBtZXJnZXMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcbiAqIHJlZmVyZW5jZXMgdG8gYmUgbWVyZ2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBtZXJnZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXJnZUZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1lcmdlIHZhbHVlcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXG4gKiAgY291bnRlcnBhcnRzLlxuICovXG5mdW5jdGlvbiBiYXNlTWVyZ2VEZWVwKG9iamVjdCwgc291cmNlLCBrZXksIHNyY0luZGV4LCBtZXJnZUZ1bmMsIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gIHZhciBvYmpWYWx1ZSA9IHNhZmVHZXQob2JqZWN0LCBrZXkpLFxuICAgICAgc3JjVmFsdWUgPSBzYWZlR2V0KHNvdXJjZSwga2V5KSxcbiAgICAgIHN0YWNrZWQgPSBzdGFjay5nZXQoc3JjVmFsdWUpO1xuXG4gIGlmIChzdGFja2VkKSB7XG4gICAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgc3RhY2tlZCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCAoa2V5ICsgJycpLCBvYmplY3QsIHNvdXJjZSwgc3RhY2spXG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgdmFyIGlzQ29tbW9uID0gbmV3VmFsdWUgPT09IHVuZGVmaW5lZDtcblxuICBpZiAoaXNDb21tb24pIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KHNyY1ZhbHVlKSxcbiAgICAgICAgaXNCdWZmID0gIWlzQXJyICYmIGlzQnVmZmVyKHNyY1ZhbHVlKSxcbiAgICAgICAgaXNUeXBlZCA9ICFpc0FyciAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheShzcmNWYWx1ZSk7XG5cbiAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xuICAgIGlmIChpc0FyciB8fCBpc0J1ZmYgfHwgaXNUeXBlZCkge1xuICAgICAgaWYgKGlzQXJyYXkob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc0FycmF5TGlrZU9iamVjdChvYmpWYWx1ZSkpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBjb3B5QXJyYXkob2JqVmFsdWUpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaXNCdWZmKSB7XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgIG5ld1ZhbHVlID0gY2xvbmVCdWZmZXIoc3JjVmFsdWUsIHRydWUpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaXNUeXBlZCkge1xuICAgICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgICAgICBuZXdWYWx1ZSA9IGNsb25lVHlwZWRBcnJheShzcmNWYWx1ZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgbmV3VmFsdWUgPSBbXTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoaXNQbGFpbk9iamVjdChzcmNWYWx1ZSkgfHwgaXNBcmd1bWVudHMoc3JjVmFsdWUpKSB7XG4gICAgICBuZXdWYWx1ZSA9IG9ialZhbHVlO1xuICAgICAgaWYgKGlzQXJndW1lbnRzKG9ialZhbHVlKSkge1xuICAgICAgICBuZXdWYWx1ZSA9IHRvUGxhaW5PYmplY3Qob2JqVmFsdWUpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoIWlzT2JqZWN0KG9ialZhbHVlKSB8fCBpc0Z1bmN0aW9uKG9ialZhbHVlKSkge1xuICAgICAgICBuZXdWYWx1ZSA9IGluaXRDbG9uZU9iamVjdChzcmNWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzQ29tbW9uKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgbWVyZ2Ugb2JqZWN0cyBhbmQgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgc3RhY2suc2V0KHNyY1ZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgbWVyZ2VGdW5jKG5ld1ZhbHVlLCBzcmNWYWx1ZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICBzdGFja1snZGVsZXRlJ10oc3JjVmFsdWUpO1xuICB9XG4gIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTWVyZ2VEZWVwO1xuIiwidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBhc3NpZ25NZXJnZVZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduTWVyZ2VWYWx1ZScpLFxuICAgIGJhc2VGb3IgPSByZXF1aXJlKCcuL19iYXNlRm9yJyksXG4gICAgYmFzZU1lcmdlRGVlcCA9IHJlcXVpcmUoJy4vX2Jhc2VNZXJnZURlZXAnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpLFxuICAgIHNhZmVHZXQgPSByZXF1aXJlKCcuL19zYWZlR2V0Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWVyZ2VgIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBtZXJnZWQgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAqICBjb3VudGVycGFydHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gIGlmIChvYmplY3QgPT09IHNvdXJjZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBiYXNlRm9yKHNvdXJjZSwgZnVuY3Rpb24oc3JjVmFsdWUsIGtleSkge1xuICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgaWYgKGlzT2JqZWN0KHNyY1ZhbHVlKSkge1xuICAgICAgYmFzZU1lcmdlRGVlcChvYmplY3QsIHNvdXJjZSwga2V5LCBzcmNJbmRleCwgYmFzZU1lcmdlLCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgICA/IGN1c3RvbWl6ZXIoc2FmZUdldChvYmplY3QsIGtleSksIHNyY1ZhbHVlLCAoa2V5ICsgJycpLCBvYmplY3QsIHNvdXJjZSwgc3RhY2spXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xuICAgICAgfVxuICAgICAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgfSwga2V5c0luKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTWVyZ2U7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICpcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlkZW50aXR5O1xuIiwiLyoqXG4gKiBBIGZhc3RlciBhbHRlcm5hdGl2ZSB0byBgRnVuY3Rpb24jYXBwbHlgLCB0aGlzIGZ1bmN0aW9uIGludm9rZXMgYGZ1bmNgXG4gKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2AgYW5kIHRoZSBhcmd1bWVudHMgb2YgYGFyZ3NgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBmdW5jYC5cbiAqL1xuZnVuY3Rpb24gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncykge1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICB9XG4gIHJldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFwcGx5O1xuIiwidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIHJlc3QgYXJyYXkgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCB0cmFuc2Zvcm0pIHtcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XG4gICAgfVxuICAgIGluZGV4ID0gLTE7XG4gICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgb3RoZXJBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdO1xuICAgIH1cbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcbiAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyUmVzdDtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnN0YW50O1xuIiwidmFyIGNvbnN0YW50ID0gcmVxdWlyZSgnLi9jb25zdGFudCcpLFxuICAgIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fZGVmaW5lUHJvcGVydHknKSxcbiAgICBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsICd0b1N0cmluZycsIHtcbiAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICd2YWx1ZSc6IGNvbnN0YW50KHN0cmluZyksXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNldFRvU3RyaW5nO1xuIiwiLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xudmFyIEhPVF9DT1VOVCA9IDgwMCxcbiAgICBIT1RfU1BBTiA9IDE2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQnbGwgc2hvcnQgb3V0IGFuZCBpbnZva2UgYGlkZW50aXR5YCBpbnN0ZWFkXG4gKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcbiAqIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzaG9ydGFibGUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcbiAgdmFyIGNvdW50ID0gMCxcbiAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhbXAgPSBuYXRpdmVOb3coKSxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcblxuICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgaWYgKCsrY291bnQgPj0gSE9UX0NPVU5UKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3J0T3V0O1xuIiwidmFyIGJhc2VTZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX2Jhc2VTZXRUb1N0cmluZycpLFxuICAgIHNob3J0T3V0ID0gcmVxdWlyZSgnLi9fc2hvcnRPdXQnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgZnVuY2AgdG8gcmV0dXJuIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIHNldFRvU3RyaW5nID0gc2hvcnRPdXQoYmFzZVNldFRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb1N0cmluZztcbiIsInZhciBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKSxcbiAgICBvdmVyUmVzdCA9IHJlcXVpcmUoJy4vX292ZXJSZXN0JyksXG4gICAgc2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRUb1N0cmluZycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlc3RgIHdoaWNoIGRvZXNuJ3QgdmFsaWRhdGUgb3IgY29lcmNlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUmVzdChmdW5jLCBzdGFydCkge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgc3RhcnQsIGlkZW50aXR5KSwgZnVuYyArICcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlUmVzdDtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gIGlmICh0eXBlID09ICdudW1iZXInXG4gICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgKSB7XG4gICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJdGVyYXRlZUNhbGw7XG4iLCJ2YXIgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGlzSXRlcmF0ZWVDYWxsID0gcmVxdWlyZSgnLi9faXNJdGVyYXRlZUNhbGwnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5hc3NpZ25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBhc3NpZ25lciBUaGUgZnVuY3Rpb24gdG8gYXNzaWduIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFzc2lnbmVyIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVBc3NpZ25lcihhc3NpZ25lcikge1xuICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoLFxuICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoID4gMSA/IHNvdXJjZXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQsXG4gICAgICAgIGd1YXJkID0gbGVuZ3RoID4gMiA/IHNvdXJjZXNbMl0gOiB1bmRlZmluZWQ7XG5cbiAgICBjdXN0b21pemVyID0gKGFzc2lnbmVyLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJylcbiAgICAgID8gKGxlbmd0aC0tLCBjdXN0b21pemVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XG4gICAgICBjdXN0b21pemVyID0gbGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XG4gICAgICBsZW5ndGggPSAxO1xuICAgIH1cbiAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICBhc3NpZ25lcihvYmplY3QsIHNvdXJjZSwgaW5kZXgsIGN1c3RvbWl6ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVBc3NpZ25lcjtcbiIsInZhciBiYXNlTWVyZ2UgPSByZXF1aXJlKCcuL19iYXNlTWVyZ2UnKSxcbiAgICBjcmVhdGVBc3NpZ25lciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUFzc2lnbmVyJyk7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25gIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IG1lcmdlcyBvd24gYW5kXG4gKiBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2Ugb2JqZWN0cyBpbnRvIHRoZVxuICogZGVzdGluYXRpb24gb2JqZWN0LiBTb3VyY2UgcHJvcGVydGllcyB0aGF0IHJlc29sdmUgdG8gYHVuZGVmaW5lZGAgYXJlXG4gKiBza2lwcGVkIGlmIGEgZGVzdGluYXRpb24gdmFsdWUgZXhpc3RzLiBBcnJheSBhbmQgcGxhaW4gb2JqZWN0IHByb3BlcnRpZXNcbiAqIGFyZSBtZXJnZWQgcmVjdXJzaXZlbHkuIE90aGVyIG9iamVjdHMgYW5kIHZhbHVlIHR5cGVzIGFyZSBvdmVycmlkZGVuIGJ5XG4gKiBhc3NpZ25tZW50LiBTb3VyY2Ugb2JqZWN0cyBhcmUgYXBwbGllZCBmcm9tIGxlZnQgdG8gcmlnaHQuIFN1YnNlcXVlbnRcbiAqIHNvdXJjZXMgb3ZlcndyaXRlIHByb3BlcnR5IGFzc2lnbm1lbnRzIG9mIHByZXZpb3VzIHNvdXJjZXMuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjUuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0ge1xuICogICAnYSc6IFt7ICdiJzogMiB9LCB7ICdkJzogNCB9XVxuICogfTtcbiAqXG4gKiB2YXIgb3RoZXIgPSB7XG4gKiAgICdhJzogW3sgJ2MnOiAzIH0sIHsgJ2UnOiA1IH1dXG4gKiB9O1xuICpcbiAqIF8ubWVyZ2Uob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiB7ICdhJzogW3sgJ2InOiAyLCAnYyc6IDMgfSwgeyAnZCc6IDQsICdlJzogNSB9XSB9XG4gKi9cbnZhciBtZXJnZSA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCkge1xuICBiYXNlTWVyZ2Uob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmdlO1xuIiwiXG5pbnRlcmZhY2UgSW5qZWN0TGlua09wdGlvbnMge1xuICByZWw6IHN0cmluZ1xuICBocmVmOiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IGluamVjdExpbmsgPShvcHRpb25zOiBJbmplY3RMaW5rT3B0aW9ucykgPT4ge1xuICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKVxuXG4gIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4gbGluay5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSkpXG5cbiAgaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcbn1cbiIsImltcG9ydCB7IENhbGxiYWNrIH0gZnJvbSAnLi90eXBlcydcblxudHlwZSBWaXNpdG9yID0gQ2FsbGJhY2s8W1Byb3BlcnR5S2V5LCB1bmtub3duXT5cblxuZXhwb3J0IGNvbnN0IGl0ZXJhdG9yID0gKGlucHV0OiB1bmtub3duLCB2aXNpdG9yOiBWaXNpdG9yKTogYW55ID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgcmV0dXJuIGlucHV0Lm1hcCgoZWwsIGluZGV4KSA9PiBpdGVyYXRvcih2aXNpdG9yKGluZGV4LCBlbCksIHZpc2l0b3IpKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgaW5wdXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoaW5wdXQpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGFjY1trZXldID0gaXRlcmF0b3IodmlzaXRvcihrZXksIHZhbHVlKSwgdmlzaXRvcilcblxuICAgICAgcmV0dXJuIGFjY1xuICAgIH0sIHt9IGFzIGFueSlcbiAgfVxuXG4gIHJldHVybiBpbnB1dFxufVxuIiwiaW1wb3J0IHsgQW55T2JqZWN0IH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCBsb2Rhc2hNZXJnZSBmcm9tICdsb2Rhc2gvbWVyZ2UnXG5cbmV4cG9ydCBjb25zdCBpc0VtcHR5VmFsdWUgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBudWxsIHwgdW5kZWZpbmVkID0+XG4gICF2YWx1ZSAmJiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZClcbmV4cG9ydCBjb25zdCBpc1ZhbHVlID0gPFQ+KHZhbHVlOiBUKTogdmFsdWUgaXMgRXhjbHVkZTxULCBudWxsIHwgdW5kZWZpbmVkPiA9PiAhaXNFbXB0eVZhbHVlKHZhbHVlKVxuZXhwb3J0IGNvbnN0IG5vb3AgPSAoKSA9PiB1bmRlZmluZWRcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNvbnN0YW50cyA9IDxLIGV4dGVuZHMgc3RyaW5nPiguLi5jb25zdGFudHM6IEtbXSkgPT4ge1xuICByZXR1cm4gY29uc3RhbnRzLnJlZHVjZTx7IFtQIGluIEtdOiBQIH0+KChhY2MsIGNvbnN0YW50KSA9PiB7XG4gICAgYWNjW2NvbnN0YW50XSA9IGNvbnN0YW50XG4gICAgcmV0dXJuIGFjY1xuICB9LCB7fSBhcyB7IFtQIGluIEtdOiBQIH0pXG59XG5cbmV4cG9ydCBjb25zdCBwaWNrID0gPFRWYWx1ZSBleHRlbmRzIEFueU9iamVjdD4ob2JqOiBUVmFsdWUsIC4uLnByb3BzOiAoa2V5b2YgVFZhbHVlKVtdKSA9PiB7XG4gIHJldHVybiBwcm9wcy5yZWR1Y2UoKHJlc3VsdCwgcHJvcCkgPT4ge1xuICAgIHJlc3VsdFtwcm9wXSA9IG9ialtwcm9wXVxuICAgIHJldHVybiByZXN1bHRcbiAgfSwge30gYXMgYW55KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb21pdDxUIGV4dGVuZHMgQW55T2JqZWN0LCBQIGV4dGVuZHMgc3RyaW5nW10+KG9iajogVCwgLi4ucHJvcHM6IFApOiBPbWl0PFQsIFBbbnVtYmVyXT4ge1xuICBjb25zdCByZXN1bHQgPSB7IC4uLm9iaiB9XG4gIHByb3BzLmZvckVhY2gocHJvcCA9PiB7XG4gICAgZGVsZXRlIHJlc3VsdFtwcm9wXVxuICB9KVxuICByZXR1cm4gcmVzdWx0XG59XG5cbmV4cG9ydCBjb25zdCBnZXQgPSAob2JqOiBBbnlPYmplY3QsIHBhdGg6IHN0cmluZywgZGVmVmFsdWU/OiB1bmtub3duKTogYW55ID0+IHtcbiAgaWYgKCFwYXRoKSByZXR1cm4gdW5kZWZpbmVkXG4gIGNvbnN0IHBhdGhBcnJheSA9IChBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aCA6IHBhdGgubWF0Y2goLyhbXlsuXFxdXSkrL2cpKSBhcyBzdHJpbmdbXVxuICBjb25zdCByZXN1bHQgPSBwYXRoQXJyYXkucmVkdWNlKChwcmV2T2JqOiBBbnlPYmplY3QsIGtleTogc3RyaW5nKSA9PiBwcmV2T2JqICYmIHByZXZPYmpba2V5XSwgb2JqKVxuICAvLyBJZiBmb3VuZCB2YWx1ZSBpcyB1bmRlZmluZWQgcmV0dXJuIGRlZmF1bHQgdmFsdWU7IG90aGVyd2lzZSByZXR1cm4gdGhlIHZhbHVlXG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZlZhbHVlIDogcmVzdWx0XG59XG5cbmV4cG9ydCBjb25zdCBzZXQgPSAob2JqOiBBbnlPYmplY3QsIHBhdGg6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IHtcbiAgY29uc3QgcGF0aEFycmF5ID0gKEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoIDogcGF0aC5tYXRjaCgvKFteWy5cXF1dKSsvZykpIGFzIHN0cmluZ1tdXG5cbiAgcmV0dXJuIHBhdGhBcnJheS5yZWR1Y2UoKGFjYywga2V5LCBpKSA9PiB7XG4gICAgaWYgKGFjY1trZXldID09PSB1bmRlZmluZWQpIGFjY1trZXldID0ge31cbiAgICBpZiAoaSA9PT0gcGF0aEFycmF5Lmxlbmd0aCAtIDEpIGFjY1trZXldID0gdmFsdWVcbiAgICByZXR1cm4gYWNjW2tleV1cbiAgfSwgb2JqKVxufVxuXG5leHBvcnQgY29uc3QgaGV4VG9SZ2IgPSAoaGV4OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgY2hhcnMgPSBoZXguc2xpY2UoMSlcblxuICBpZiAoY2hhcnMubGVuZ3RoID09PSAzKSB7XG4gICAgaGV4ID0gY2hhcnNcbiAgICAgIC5zcGxpdCgnJylcbiAgICAgIC5tYXAodmFsID0+IGAke3ZhbH0ke3ZhbH1gKVxuICAgICAgLmpvaW4oJycpXG4gIH1cblxuICBjb25zdCByZXN1bHQgPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pLmV4ZWMoaGV4KVxuXG4gIHJldHVybiByZXN1bHRcbiAgICA/IHtcbiAgICAgICAgcjogcGFyc2VJbnQocmVzdWx0WzFdLCAxNiksXG4gICAgICAgIGc6IHBhcnNlSW50KHJlc3VsdFsyXSwgMTYpLFxuICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10sIDE2KVxuICAgICAgfVxuICAgIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBjb25zdCBpc0pzb25TYW1lID0gKC4uLnZhbHVlczogdW5rbm93bltdKSA9PiB7XG4gIHJldHVybiB2YWx1ZXMubWFwKHZhbHVlID0+IEpTT04uc3RyaW5naWZ5KHZhbHVlKSkuZXZlcnkoKHZhbCwgXywgYXJyKSA9PiB2YWwgPT09IGFyclswXSlcbn1cblxuZXhwb3J0IGNvbnN0IHJnYlRvUmdiYSA9IChyZ2I6IHN0cmluZywgYWxwaGEgPSAxKTogc3RyaW5nID0+IHJnYi5yZXBsYWNlKCcpJywgYCwgJHthbHBoYX0pYCkucmVwbGFjZSgncmdiJywgJ3JnYmEnKVxuXG5leHBvcnQgY29uc3QgbWVyZ2UgPSBsb2Rhc2hNZXJnZVxuXG5leHBvcnQgY29uc3QgZGV2aWNlcyA9IFsnZGVza3RvcCcsICdsYXB0b3AnLCAndGFibGV0JywgJ21vYmlsZSddIGFzIGNvbnN0XG5cbmV4cG9ydCBjb25zdCBCUkVBS1BPSU5UUyA9IHtcbiAgbW9iaWxlOiAzMjAsXG4gIHRhYmxldDogNzY4LFxuICBsYXB0b3A6IDEwMjQsXG4gIGRlc2t0b3A6IDE5MjBcbn0gYXMgY29uc3RcblxuZXhwb3J0ICogZnJvbSAnLi90eXBlcydcbmV4cG9ydCAqIGZyb20gJy4vZG9tJ1xuZXhwb3J0ICogZnJvbSAnLi9pdGVyYXRvcidcbiIsImltcG9ydCB7IEFueU9iamVjdCwgRGV2aWNlLCBkZXZpY2VzLCBFeHRyYWN0UnVsZXMsIGlzVmFsdWUsIGl0ZXJhdG9yLCBMYXllciwgUnVsZSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgQW55U3RhdGUgfSBmcm9tICcuLi9wcm9tb3MvU2ltcGxlR2lmdC90eXBlcydcblxuY29uc3QgaXNWYWxpZExheWVyID0gKHN0YXRlOiBBbnlPYmplY3QgPSB7fSk6IHN0YXRlIGlzIExheWVyID0+XG4gIHR5cGVvZiBzdGF0ZSA9PT0gJ29iamVjdCcgJiYgaXNWYWx1ZShzdGF0ZSkgJiYgZGV2aWNlcy5ldmVyeShkZXZpY2UgPT4gZGV2aWNlIGluIHN0YXRlKVxuXG5leHBvcnQgY29uc3QgZ2V0UnVsZXMgPSA8VFN0YXRlIGV4dGVuZHMgQW55U3RhdGUsIFREZXZpY2UgZXh0ZW5kcyBEZXZpY2UgPSAnZGVza3RvcCc+KFxuICBzdGF0ZTogVFN0YXRlLFxuICBkZXZpY2U6IFREZXZpY2Vcbik6IEV4dHJhY3RSdWxlczxUU3RhdGUsIFREZXZpY2U+ID0+IHtcbiAgaWYgKCFzdGF0ZSkgcmV0dXJuIHN0YXRlXG5cbiAgcmV0dXJuIGl0ZXJhdG9yKHN0YXRlLCAoX2tleSwgdmFsdWU6IGFueSkgPT4ge1xuICAgIGlmIChpc1ZhbGlkTGF5ZXIodmFsdWUpKSB7XG4gICAgICBjb25zdCByZXN1bHRSdWxlcyA9IHZhbHVlW2RldmljZV1cbiAgICAgIGlmICgncGFyZW50JyBpbiByZXN1bHRSdWxlcyAmJiBpc1ZhbHVlKHJlc3VsdFJ1bGVzLnBhcmVudCkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlW3Jlc3VsdFJ1bGVzLnBhcmVudF1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHRSdWxlc1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZVxuICB9KSBhcyBFeHRyYWN0UnVsZXM8VFN0YXRlLCBURGV2aWNlPlxufVxuIiwiaW1wb3J0IHsgRGV2aWNlIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyBnZXRSdWxlcyB9IGZyb20gJy4uL2hlbHBlcnMvZ2V0RGV2aWNlU3RhdGUnXG5pbXBvcnQgeyBBbnlTdGF0ZSB9IGZyb20gJy4uL3Byb21vcy9TaW1wbGVHaWZ0L3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgdXNlR2V0UnVsZXMgPSA8VFN0YXRlIGV4dGVuZHMgQW55U3RhdGUsIFREZXZpY2UgZXh0ZW5kcyBEZXZpY2U+KHN0YXRlOiBUU3RhdGUsIGRldmljZTogVERldmljZSkgPT5cbiAgZ2V0UnVsZXM8VFN0YXRlLCBURGV2aWNlPihzdGF0ZSwgZGV2aWNlKVxuIiwiaW1wb3J0IHsgQlJFQUtQT0lOVFMsIERldmljZSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgdXNlTGF5b3V0RWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgeyBNdXRhYmxlUmVmIH0gZnJvbSAncHJlYWN0L2hvb2tzJ1xuXG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gIHRhcmdldFJlZjogTXV0YWJsZVJlZjxIVE1MRGl2RWxlbWVudD5cbiAgLyoqXG4gICAqIFByb21vINCy0YHRgtGA0LDQuNCy0LDQtdGC0YHRjyDQsiDRgNCw0LfQvdGL0LUgRE9NINC4INC80Ysg0L3QtSDQt9C90LDQtdC8INGA0LDQt9C80LXRgCDQutCw0LrQvtCz0L4g0LrQvtC90YLQtdC50L3QtdGA0LBcbiAgICog0Y/QstC70Y/QtdGC0YHRjyDQvdGD0LbQvdGL0LwuINCd0LDQv9GA0LjQvNC10YAgR2lmdCog0LfQsNC90LjQvNCw0LXRgiDQstGB0LXQs9C+IDMwcHgsINC4INC90LXQvtCx0YXQvtC00LjQvNGL0Lkg0LrQvtC90YLQtdC50L3QtdGAXG4gICAqINC80L7QttC10YIg0L3QsNGF0L7QtNC40YLRjNGB0Y8g0LPQvtGA0LDQt9C00L4g0LLRi9GI0LUuXG4gICAqL1xuICBwYXJlbnRLZXk/OiBzdHJpbmdcbiAgYnJlYWtwb2ludHM/OiB0eXBlb2YgQlJFQUtQT0lOVFNcbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNvbnRhaW5lckRldmljZSA9ICh7XG4gIHRhcmdldFJlZixcbiAgcGFyZW50S2V5ID0gJ2RldmljZS1jb250YWluZXInLFxuICBicmVha3BvaW50cyA9IEJSRUFLUE9JTlRTXG59OiBPcHRpb25zKSA9PiB7XG4gIGNvbnN0IFtkZXZpY2UsIHNldERldmljZV0gPSB1c2VTdGF0ZTxEZXZpY2U+KCdkZXNrdG9wJylcblxuICBjb25zdCBjaGVja0RldmljZSA9IChwYXJlbnQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgcGFyZW50V2lkdGggPSBwYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggfHwgMFxuICAgIGNvbnN0IHNvcnRlZEJyZWFrcG9pbnRzID0gT2JqZWN0LmVudHJpZXMoeyAuLi5icmVha3BvaW50cyB9KS5zb3J0KChbXzEsIHZhbHVlQV0sIFtfMiwgdmFsdWVCXSkgPT4gdmFsdWVBIC0gdmFsdWVCKVxuXG4gICAgY29uc3QgZmluZERldmljZSA9XG4gICAgICAoc29ydGVkQnJlYWtwb2ludHMuZmluZCgoW18xLCB2YWx1ZV0sIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IFtfMiwgbmV4dFZhbHVlXSA9IHNvcnRlZEJyZWFrcG9pbnRzW2luZGV4ICsgMV0gfHwgW11cblxuICAgICAgICByZXR1cm4gcGFyZW50V2lkdGggPj0gdmFsdWUgJiYgcGFyZW50V2lkdGggPCBuZXh0VmFsdWVcbiAgICAgIH0pPy5bMF0gYXMgRGV2aWNlKSB8fCAnZGVza3RvcCdcblxuICAgIHNldERldmljZShmaW5kRGV2aWNlKVxuICB9XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gdGFyZ2V0UmVmLmN1cnJlbnQuY2xvc2VzdChgW2RhdGEtJHtwYXJlbnRLZXl9XWApXG5cbiAgICBpZiAocGFyZW50RWxlbWVudCkge1xuICAgICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gY2hlY2tEZXZpY2UocGFyZW50RWxlbWVudCkpXG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKHBhcmVudEVsZW1lbnQpXG5cbiAgICAgIGNoZWNrRGV2aWNlKHBhcmVudEVsZW1lbnQpXG4gICAgfVxuICB9LCBbXSlcblxuICByZXR1cm4gZGV2aWNlXG59XG4iLCJpbXBvcnQgeyBBbnlPYmplY3QsIGRldmljZXMsIEZpdE9wdGlvbiwgaGV4VG9SZ2IsIGlzRW1wdHlWYWx1ZSwgaXNWYWx1ZSwgcmdiVG9SZ2JhIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyBFbWl0dGVyVHlwZSB9IGZyb20gJ3NyYy9yZW5kZXJEcml2ZXInXG5pbXBvcnQgeyBpbmplY3RTdHlsZVJ1bGVzLCBTdHlsZVJ1bGVzIH0gZnJvbSAnc3JjL3V0aWxzL2luamVjdFN0eWxlUnVsZXMnXG5pbXBvcnQgeyBpc1ZhbGlkU3R5bGVLZXkgfSBmcm9tICcuL2lzVmFsaWRTdHlsZUtleSdcblxuLyoqXG4gKiDQn9C70LDQs9C40L0g0L/RgNC40LzQtdC90Y/QtdGCINC/0YDQsNCy0LjQu9CwOiDRgdGC0LjQu9C4LCBpbm5lclRleHQgLi4uXG4gKiDQldGB0LvQuCDQutC+0L3RgtC10L3RgtCwINC90LXRgiwg0YLQviDQndC+0LTQsCDRgdC60YDRi9Cy0LDQtdGC0YHRj1xuICovXG5cbnR5cGUgQ3VzdG9tU3R5bGVzID0gUGFydGlhbDxcbiAgT21pdDxTdHlsZVJ1bGVzLCAnYm9yZGVyV2lkdGgnIHwgJ21pbkhlaWdodCcgfCAnbWluV2lkdGgnIHwgJ2ZvbnRTaXplJz4gJiB7XG4gICAgbWluSGVpZ2h0OiBudW1iZXJcbiAgICBtaW5XaWR0aDogbnVtYmVyXG4gICAgZm9udFNpemU6IG51bWJlclxuICB9XG4+XG5cbmRlY2xhcmUgbW9kdWxlICdzcmMvcmVuZGVyRHJpdmVyJyB7XG4gIGludGVyZmFjZSBSZW5kZXJEcml2ZXJSdWxlIGV4dGVuZHMgQ3VzdG9tU3R5bGVzIHtcbiAgICBpbm5lckhUTUw/OiBzdHJpbmdcbiAgICBpbm5lclRleHQ/OiBzdHJpbmdcbiAgICBjb3JuZXI/OiBudW1iZXJcbiAgICBiYWNrZ3JvdW5kRml0PzogRml0T3B0aW9uXG4gICAgYmFja2dyb3VuZENvbG9yT3BhY2l0eT86IG51bWJlclxuICAgIGlzQm9sZD86IGJvb2xlYW5cbiAgICBpc0l0YWxpYz86IGJvb2xlYW5cbiAgICBpc1Rocm91Z2g/OiBib29sZWFuXG4gICAgJGF0dHJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPlxuICB9XG59XG5cbmNvbnN0IHdyYXBUbyA9ICh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyLCB1bnRpbDogJyUnIHwgJ3B4JykgPT4gYCR7dmFsdWV9JHt1bnRpbH1gXG5cbmNvbnN0IHRvUHggPSAoa2V5OiBzdHJpbmcpID0+IGtleS5zdGFydHNXaXRoKCdweF8nKVxuY29uc3QgdG9QZXJjZW50ID0gKGtleTogc3RyaW5nKSA9PiBrZXkuc3RhcnRzV2l0aCgncGVyY2VudF8nKVxuXG5jb25zdCBmb3JtYXRSdWxlID0gKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gIGxldCBuZXdLZXkgPSBrZXlcbiAgbGV0IG5ld1ZhbHVlID0gdmFsdWVcblxuICBpZiAodG9QeChuZXdLZXkpKSB7XG4gICAgbmV3S2V5ID0gbmV3S2V5LnJlcGxhY2UoJ3B4XycsICcnKVxuICAgIG5ld1ZhbHVlID0gd3JhcFRvKHZhbHVlLCAncHgnKVxuICB9XG4gIGlmICh0b1BlcmNlbnQobmV3S2V5KSkge1xuICAgIG5ld0tleSA9IG5ld0tleS5yZXBsYWNlKCdwZXJjZW50XycsICcnKVxuICAgIG5ld1ZhbHVlID0gd3JhcFRvKHZhbHVlLCAnJScpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGtleTogbmV3S2V5LFxuICAgIHZhbHVlOiBuZXdWYWx1ZVxuICB9XG59XG5cbmNvbnN0IERFRkFVTFRfVE9fUFggPSBbXG4gICdib3JkZXJXaWR0aCcsXG4gICdib3JkZXJMZWZ0V2lkdGgnLFxuICAnYm9yZGVyUmlnaHRXaWR0aCcsXG4gICdib3JkZXJUb3BXaWR0aCcsXG4gICdib3JkZXJCb3R0b21XaWR0aCcsXG4gICdtaW5IZWlnaHQnLFxuICAnbWluV2lkdGgnLFxuICAnbWF4V2lkdGgnLFxuICAnbWF4SGVpZ2h0JyxcbiAgJ2ZvbnRTaXplJyxcbiAgJ2hlaWdodCcsXG4gICd3aWR0aCcsXG4gICdsZXR0ZXJTcGFjaW5nJyxcbiAgJ2ZvbnRTaXplJyxcbiAgJ2xlZnQnLFxuICAncmlnaHQnLFxuICAndG9wJyxcbiAgJ2JvdHRvbScsXG4gICdtYXJnaW5Ub3AnLFxuICAnbWFyZ2luQm90dG9tJyxcbiAgJ21hcmdpbkxlZnQnLFxuICAnbWFyZ2luUmlnaHQnLFxuICAncGFkZGluZ1RvcCcsXG4gICdwYWRkaW5nQm90dG9tJyxcbiAgJ3BhZGRpbmdMZWZ0JyxcbiAgJ3BhZGRpbmdSaWdodCdcbl1cblxuZXhwb3J0IGNvbnN0IHBhcnNlUnVsZXMgPSAocnVsZXM6IEFueU9iamVjdCwgbGF5ZXI/OiBzdHJpbmcpID0+IHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJ1bGVzKVxuXG4gIGlmIChrZXlzLmluY2x1ZGVzKCdpbm5lckhUTUwnKSB8fCBrZXlzLmluY2x1ZGVzKCdpbm5lclRleHQnKSkge1xuICAgIGNvbnNvbGUud2FybihgV2FybmluZyEgSW5uZXJIVE1MIGFuZCBpbm5lclRleHQgaXMgZGVwcmVjYXRlZC4gVXNlIFwiY2hpbGRyZW5cIiBwcm9wZXJ0eS5gLCBsYXllcilcbiAgfVxuXG4gIGlmICh0eXBlb2YgcnVsZXMgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHJ1bGVzXG4gIH1cblxuICBpZiAoJ3R5cG9ncmFwaHknIGluIHJ1bGVzICYmICdhY2NlbnRUeXBvZ3JhcGh5JyBpbiBydWxlcykge1xuICAgIGNvbnN0IHR5cG9ncmFwaHkgPSBydWxlcy50eXBvZ3JhcGh5XG4gICAgY29uc3QgYWNjZW50VHlwb2dyYXBoeSA9IHJ1bGVzLmFjY2VudFR5cG9ncmFwaHlcblxuICAgIHJ1bGVzID0ge1xuICAgICAgLi4ucnVsZXMsXG4gICAgICAuLi50eXBvZ3JhcGh5LFxuICAgICAgJy0tZm9udC1mYW1pbHknOiBhY2NlbnRUeXBvZ3JhcGh5LmZvbnRGYW1pbHksXG4gICAgICAnLS1hY2NlbnQtY29sb3InOiBhY2NlbnRUeXBvZ3JhcGh5LmNvbG9yLFxuICAgICAgJ3B4Xy0tYWNjZW50LXNpemUnOiBhY2NlbnRUeXBvZ3JhcGh5LmZvbnRTaXplXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJ1bGVzKS5yZWR1Y2UoKGFjYywgW3Byb3BLZXksIHByb3BWYWx1ZV0pID0+IHtcbiAgICBpZiAoREVGQVVMVF9UT19QWC5pbmNsdWRlcyhwcm9wS2V5KSkge1xuICAgICAgcHJvcFZhbHVlID0gd3JhcFRvKHByb3BWYWx1ZSwgJ3B4JylcbiAgICB9XG5cbiAgICBjb25zdCB7IGtleSwgdmFsdWUgfSA9IGZvcm1hdFJ1bGUocHJvcEtleSwgcHJvcFZhbHVlKVxuICAgIGFjY1trZXldID0gdmFsdWVcblxuICAgIGlmIChrZXkgPT09ICdpbm5lckhUTUwnKSB7XG4gICAgICBhY2MuaW5uZXJIVE1MID0gaXNWYWx1ZSh2YWx1ZSkgPyBgJHt2YWx1ZX1gIDogJydcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnaW5uZXJUZXh0Jykge1xuICAgICAgYWNjLmlubmVyVGV4dCA9IGlzVmFsdWUodmFsdWUpID8gYCR7dmFsdWV9YCA6ICcnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2NoaWxkcmVuJykge1xuICAgICAgYWNjLmNoaWxkcmVuID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IChpc1ZhbHVlKHZhbHVlKSA/IGAke3ZhbHVlfWAgOiAnJykgOiB2YWx1ZVxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdpbm5lckhUTUwnIHx8IGtleSA9PT0gJ2lubmVyVGV4dCcgfHwga2V5ID09PSAnY2hpbGRyZW4nKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgYWNjLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgIH0gZWxzZSBpZiAoaXNFbXB0eVZhbHVlKHZhbHVlKSkge1xuICAgICAgICBhY2MuZGlzcGxheSA9ICdub25lJ1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChrZXkuaW5jbHVkZXMoJ2JvcmRlcldpZHRoJykpIHtcbiAgICAgIGFjYy5ib3JkZXJTdHlsZSA9ICdzb2xpZCdcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnY29ybmVyJykge1xuICAgICAgYWNjLmJvcmRlclJhZGl1cyA9IHdyYXBUbyh2YWx1ZSwgJ3B4JylcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnYmFja2dyb3VuZEZpdCcpIHtcbiAgICAgIGFjYy5iYWNrZ3JvdW5kU2l6ZSA9IHZhbHVlIGFzIEZpdE9wdGlvblxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdiYWNrZ3JvdW5kSW1hZ2UnICYmIGlzVmFsdWUodmFsdWUpKSB7XG4gICAgICBhY2MuYmFja2dyb3VuZEltYWdlID0gYHVybCgke3ZhbHVlfSlgXG4gICAgICBhY2MuYmFja2dyb3VuZFJlcGVhdCA9ICduby1yZXBlYXQnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2JhY2tncm91bmRDb2xvck9wYWNpdHknICYmIGlzVmFsdWUoYWNjLmJhY2tncm91bmRDb2xvck9wYWNpdHkpICYmIGlzVmFsdWUoYWNjLmJhY2tncm91bmRDb2xvcikpIHtcbiAgICAgIGNvbnN0IHJnYiA9IGhleFRvUmdiKGFjYy5iYWNrZ3JvdW5kQ29sb3IpXG4gICAgICBpZiAocmdiKSB7XG4gICAgICAgIGFjYy5iYWNrZ3JvdW5kQ29sb3IgPSByZ2JUb1JnYmEoYHJnYigke3JnYi5yfSwgJHtyZ2IuZ30sICR7cmdiLmJ9KWAsICthY2MuYmFja2dyb3VuZENvbG9yT3BhY2l0eSAvIDEwMClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnaXNCb2xkJykge1xuICAgICAgYWNjLmZvbnRXZWlnaHQgPSB2YWx1ZSA/ICdib2xkJyA6ICdpbml0aWFsJ1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdpc0l0YWxpYycpIHtcbiAgICAgIGFjYy5mb250U3R5bGUgPSB2YWx1ZSA/ICdpdGFsaWMnIDogJ2luaXRpYWwnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2lzVGhyb3VnaCcpIHtcbiAgICAgIGFjYy50ZXh0RGVjb3JhdGlvbiA9IHZhbHVlID8gJ2xpbmUtdGhyb3VnaCcgOiAnaW5pdGlhbCdcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjXG4gIH0sIHJ1bGVzKVxufVxuIiwiaW1wb3J0IHsgcGFyc2VSdWxlcyB9IGZyb20gJy4uL2hlbHBlcnMvcGFyc2VSdWxlcydcbmltcG9ydCB7IEFueU9iamVjdCB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuXG5jb25zdCBpc1ZhbGlkUnVsZSA9IChydWxlOiBBbnlPYmplY3QpID0+IHR5cGVvZiBydWxlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShydWxlKSAmJiAncGFyZW50JyBpbiBydWxlXG5cbmV4cG9ydCBjb25zdCB1c2VQYXJzZVJ1bGVzID0gKHN0YXRlOiB1bmtub3duKSA9PlxuICBPYmplY3QuZW50cmllcyhzdGF0ZSkucmVkdWNlKChhY2MsIFtsYXllciwgcnVsZV0pID0+IHtcbiAgICBhY2NbbGF5ZXJdID0gaXNWYWxpZFJ1bGUocnVsZSkgPyBwYXJzZVJ1bGVzKHsgLi4uc3RhdGVbbGF5ZXJdIH0sIGxheWVyKSA6IHJ1bGVcblxuICAgIHJldHVybiBhY2NcbiAgfSwge30pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5cbmludGVyZmFjZSBQcm9wcyB7XG4gIGNoaWxkcmVuOiBzdHJpbmdcbn1cblxuY29uc3QgRGlzcGxheVRleHQ6IEZDPFByb3BzPiA9ICh7IGNoaWxkcmVuLCAuLi5yZXN0IH0pID0+IHtcbiAgY29uc3QgZm9ybWF0VmFsdWUgPSBjaGlsZHJlbj8ucmVwbGFjZSgnc2NyaXB0JywgJycpPy5yZXBsYWNlKC97eyguKj8pfX0vZywgYDxzcGFuPiQxPC9zcGFuPmApXG5cbiAgcmV0dXJuIDxkaXYgey4uLnJlc3R9IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogZm9ybWF0VmFsdWUgfX0gLz5cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGlzcGxheVRleHRcbiIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcblxuZXhwb3J0IGNvbnN0IHVzZVRvZ2dsZSA9ICgpID0+IHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIHJldHVybiBbaXNPcGVuLCAoKSA9PiBzZXRJc09wZW4ocHJldiA9PiAhcHJldildXG59XG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5cbmNvbnN0IENsb3NlSWNvbjogRkMgPSAoKSA9PiAoXG4gIDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjAnIGhlaWdodD0nMjAnIHZpZXdCb3g9JzAgMCAyNCAyNCc+XG4gICAgPHBhdGhcbiAgICAgIGQ9J00xNy42NTkgNC45MjlhMSAxIDAgMSAxIDEuNDE0IDEuNDE0TDEzLjQxNiAxMmw1LjY1NyA1LjY1N2ExIDEgMCAwIDEtMS40MTUgMS40MTRsLTUuNjU2LTUuNjU3LTUuNjU3IDUuNjU3YTEgMSAwIDAgMS0xLjQxNC0xLjQxNEwxMC41ODcgMTIgNC45MzEgNi4zNDNBMSAxIDAgMSAxIDYuMzQ1IDQuOTNsNS42NTcgNS42NTcgNS42NTYtNS42NTdaJ1xuICAgICAgZmlsbD0nY3VycmVudENvbG9yJ1xuICAgID48L3BhdGg+XG4gIDwvc3ZnPlxuKVxuXG5leHBvcnQgZGVmYXVsdCBDbG9zZUljb25cbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcblxuY29uc3QgR2lmdEljb246IEZDID0gKCkgPT4gKFxuICA8c3ZnIHZpZXdCb3g9JzAgMCAxNiAxNic+XG4gICAgPHBhdGhcbiAgICAgIGZpbGw9J2N1cnJlbnRDb2xvcidcbiAgICAgIGZpbGxSdWxlPSdldmVub2RkJ1xuICAgICAgZD0nTTIuMTMgOEg3djcuMzFIMy4yMmExLjA5IDEuMDkgMCAwMS0xLjA5LTEuMDl6TTkgMTUuMzRoMy44MWExLjA5IDEuMDkgMCAwMDEuMDktMS4wOVY4SDl6bTUuOC05Ljk0djEuMTlhLjQ4LjQ4IDAgMDEtLjQ4LjQ4SDEuNzFhLjQ4LjQ4IDAgMDEtLjQ4LS40OFY1LjRjMC0uNTk2LjQ4NC0xLjA4IDEuMDgtMS4wOEg1YTIuNDggMi40OCAwIDAxLTEuNDctMS42NSAxLjYyIDEuNjIgMCAwMS4yNi0xLjQgMS41NyAxLjU3IDAgMDExLS41OGMuMTEtLjAxLjIyLS4wMS4zMyAwYTIuNSAyLjUgMCAwMTIgMUE5IDkgMCAwMTggMy4yMmExMC4zOCAxMC4zOCAwIDAxLjkxLTEuNTQgMi40OSAyLjQ5IDAgMDExLjkzLTFoLjM2Yy4zNjkuMDY1LjcwMi4yNi45NC41NS4zMS40MDcuNDE0LjkzNi4yOCAxLjQzYTIuNDggMi40OCAwIDAxLTEuNDUgMS42NGgyLjc3YTEuMDggMS4wOCAwIDAxMS4wMyAxLjF6TTguNjYgNGE5LjgxIDkuODEgMCAwMDEuOS0uNTUgMS41MiAxLjUyIDAgMDAuODgtMSAuNjguNjggMCAwMC0uMS0uNTkuNi42IDAgMDAtLjM0LS4yMi41OC41OCAwIDAwLS4xOCAwIDEuNTIgMS41MiAwIDAwLTEuMTcuNjNBOS4wNiA5LjA2IDAgMDA4LjY2IDR6bS0zLjMyLS41OEE5LjYyIDkuNjIgMCAwMDcuMjUgNGE4LjU5IDguNTkgMCAwMC0xLTEuNzIgMS41MSAxLjUxIDAgMDAtMS4xOC0uNjNoLS4xM2EuNjYuNjYgMCAwMC0uMzkuMjIuNjYuNjYgMCAwMC0uMDkuNTdjLjEzLjQ0My40NTMuODA0Ljg4Ljk4eidcbiAgICA+PC9wYXRoPlxuICA8L3N2Zz5cbilcblxuZXhwb3J0IGRlZmF1bHQgR2lmdEljb25cbiIsImltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICcuLi91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgaXNWYWx1ZSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuXG50eXBlIEFuaW1hdGlvbk5hbWUgPSAnZmFkZScgfCAncHVsc2UnIHwgJ3dpZ2dsZScgfCAnZ3JhZGllbnQnXG5cbmNvbnN0IGFuaW1hdGlvbnNNYXAgPSAoYW5pbWF0aW9uczogUmVjb3JkPEFuaW1hdGlvbk5hbWUsIHN0cmluZz4pID0+ICh7XG4gIGZhZGU6IGAke2FuaW1hdGlvbnMuZmFkZX0gMnMgbGluZWFyIGluZmluaXRlYCxcbiAgcHVsc2U6IGAke2FuaW1hdGlvbnMucHVsc2V9IC4zcyBsaW5lYXIgMHMgaW5maW5pdGUgYWx0ZXJuYXRlIGZvcndhcmRzYCxcbiAgd2lnZ2xlOiBgJHthbmltYXRpb25zLndpZ2dsZX0gMnMgbGluZWFyIGluZmluaXRlYCxcbiAgZ3JhZGllbnQ6IGAke2FuaW1hdGlvbnMuZ3JhZGllbnR9IDNzIGVhc2UgaW5maW5pdGVgLFxufSlcblxuZXhwb3J0IGNvbnN0IHVzZUdpZnRSdWxlcyA9IChkZXZpY2VTdGF0ZTogdW5rbm93biwgYW5pbWF0aW9uczogUmVjb3JkPEFuaW1hdGlvbk5hbWUsIHN0cmluZz4pID0+IHtcbiAgY29uc3QgZnVsbEFuaW1hdGlvbnMgPSBhbmltYXRpb25zTWFwKGFuaW1hdGlvbnMpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcbiAgY29uc3QgaGFzSWNvbiA9IHJ1bGVzPy5pY29uPy5oYXNJY29uXG5cbiAgY29uc3QgYXJyb3dSdWxlcyA9IHtcbiAgICBsZWZ0OiBgJHsrKGRldmljZVN0YXRlPy5jb250YWluZXI/LmxlZnQgfHwgMCkgKiAtMSArIDh9cHhgLFxuICAgIGJhY2tncm91bmRDb2xvcjogcnVsZXM/LmNvbnRhaW5lcj8uYmFja2dyb3VuZENvbG9yLFxuICAgIGJvcmRlclRvcFdpZHRoOiBydWxlcz8uY29udGFpbmVyPy5ib3JkZXJXaWR0aCxcbiAgICBib3JkZXJUb3BDb2xvcjogcnVsZXM/LmNvbnRhaW5lcj8uYm9yZGVyQ29sb3IsXG4gICAgYm9yZGVyVG9wU3R5bGU6ICdzb2xpZCcsXG4gICAgYm9yZGVyTGVmdFdpZHRoOiBydWxlcz8uY29udGFpbmVyPy5ib3JkZXJXaWR0aCxcbiAgICBib3JkZXJMZWZ0Q29sb3I6IHJ1bGVzPy5jb250YWluZXI/LmJvcmRlckNvbG9yLFxuICAgIGJvcmRlckxlZnRTdHlsZTogJ3NvbGlkJ1xuICB9XG5cbiAgY29uc3QgYm9keVJ1bGVzID0ge1xuICAgIGxlZnQ6IHJ1bGVzPy5jb250YWluZXI/LmxlZnRcbiAgfVxuXG4gIGNvbnN0IGFsbEFuaW1hdGlvbnMgPSAocnVsZXM/Lmljb24/LmFuaW1hdGlvbnMgfHwgW10pXG4gICAgLm1hcCgoYW5pbWF0aW9uOiBBbmltYXRpb25OYW1lKSA9PiBmdWxsQW5pbWF0aW9uc1thbmltYXRpb25dKVxuICAgIC5qb2luKCcsICcpXG5cbiAgY29uc3QgYmFja2dyb3VuZFN0eWxlcyA9XG4gICAgaXNWYWx1ZShydWxlcz8uaWNvbj8uZ3JhZGllbnRDb2xvcikgJiYgcnVsZXM/Lmljb24/LmFuaW1hdGlvbnMuaW5jbHVkZXMoJ2dyYWRpZW50JylcbiAgICAgID8ge1xuICAgICAgICAgIGJhY2tncm91bmQ6IGBsaW5lYXItZ3JhZGllbnQoLTkwZGVnLCAke3J1bGVzLmljb24/LmJhY2tncm91bmRDb2xvcn0gMCUsICR7cnVsZXM/Lmljb24/LmdyYWRpZW50Q29sb3J9IDEwMCUpIDAlIDAlIC8gNDAwJSA0MDAlYCxcbiAgICAgICAgICBiYWNrZ3JvdW5kU2l6ZTogJzQwMCUgNDAwJSdcbiAgICAgICAgfVxuICAgICAgOiB7fVxuXG4gIGNvbnN0IGljb25SdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8uaWNvbiB8fCB7fSxcbiAgICBhbmltYXRpb246IGFsbEFuaW1hdGlvbnMsXG4gICAgLi4uYmFja2dyb3VuZFN0eWxlc1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBoYXNJY29uLFxuICAgIGFycm93UnVsZXMsXG4gICAgYm9keVJ1bGVzLFxuICAgIGljb25SdWxlc1xuICB9XG59XG4iLCJleHBvcnQgY29uc3QgYmFja2dyb3VuZE9wdGlvbnMgPSBbJ2JhY2tncm91bmRDb2xvcicsICdiYWNrZ3JvdW5kQ29sb3JPcGFjaXR5JywgJ2JhY2tncm91bmRJbWFnZScsICdiYWNrZ3JvdW5kRml0J11cblxuZXhwb3J0IGNvbnN0IHNwYWNpbmdPcHRpb25zID0gW1xuICAnbWFyZ2luVG9wJyxcbiAgJ21hcmdpbkJvdHRvbScsXG4gICdtYXJnaW5MZWZ0JyxcbiAgJ21hcmdpblJpZ2h0JyxcbiAgJ3BhZGRpbmdUb3AnLFxuICAncGFkZGluZ0JvdHRvbScsXG4gICdwYWRkaW5nTGVmdCcsXG4gICdwYWRkaW5nUmlnaHQnXG5dXG5cblxuZXhwb3J0IGNvbnN0IG5vb3BZYU1ldHJpa2EgPSAoZ29hbDogc3RyaW5nKSA9PiBjb25zb2xlLmxvZyhgTm9vcCBZYU1la3Rpa2EgcmVhY2ggZ29hbDogJHtnb2FsfWApXG5leHBvcnQgY29uc3Qgbm9vcEFkRm94ID0gKGdvYWw6IHN0cmluZykgPT4gY29uc29sZS5sb2coYE5vb3AgQWRGb3ggcmVhY2ggZ29hbDogJHtnb2FsfWApXG4iLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgeyBpc0pzb25TYW1lLCBwaWNrIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyBub29wQWRGb3gsIG5vb3BZYU1ldHJpa2EgfSBmcm9tIFwic3JjL2hlbHBlcnMvY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBjb25zdCB1c2VNZXRyaWNzID0gKHN0YXRlOiB1bmtub3duLCBsYXllck5hbWUgPSAncm9vdCcpID0+IHtcbiAgY29uc3Qgc2F2ZU1ldHJpY3MgPSB1c2VSZWYoKVxuICBjb25zdCB5YVJlYWNoR29hbCA9IHN0YXRlLnlhUmVhY2hHb2FsIHx8IG5vb3BZYU1ldHJpa2FcbiAgY29uc3QgYWRmb3hSZWFjaEdvYWwgPSBzdGF0ZS5hZGZveFJlYWNoR29hbCB8fCBub29wQWRGb3hcbiAgY29uc3QgbWV0cmljcyA9IHBpY2soc3RhdGVbbGF5ZXJOYW1lXSwgJ3lhU2hvdycsICd5YUNsaWNrJywgJ2FkZm94U2hvdycsICdhZGZveENsaWNrJylcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNKc29uU2FtZShzYXZlTWV0cmljcy5jdXJyZW50LCBtZXRyaWNzKSkge1xuICAgICAgaWYgKG1ldHJpY3MueWFTaG93KSB7XG4gICAgICAgIHlhUmVhY2hHb2FsKG1ldHJpY3MueWFTaG93KVxuICAgICAgfVxuICAgICAgaWYgKG1ldHJpY3MueWFTaG93KSB7XG4gICAgICAgIGFkZm94UmVhY2hHb2FsKG1ldHJpY3MuYWRmb3hTaG93KVxuICAgICAgfVxuICAgIH1cbiAgICBzYXZlTWV0cmljcy5jdXJyZW50ID0gbWV0cmljc1xuICB9LCBbbWV0cmljc10pXG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAobWV0cmljcy55YUNsaWNrKSB7XG4gICAgICB5YVJlYWNoR29hbChtZXRyaWNzLnlhQ2xpY2spXG4gICAgfVxuICAgIGlmIChtZXRyaWNzLmFkZm94Q2xpY2spIHtcbiAgICAgIGFkZm94UmVhY2hHb2FsKG1ldHJpY3MuYWRmb3hDbGljaylcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IGluamVjdExpbmssIGl0ZXJhdG9yIH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8gfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiOyAvLyBodHRwczovL2dpdGh1Yi5jb20vRG93bmxvYWQvcHJlYWN0LWhlbG1ldC9pc3N1ZXMvMzRcblxuZXhwb3J0IGNvbnN0IHVzZUV4dHJhY3RGb250cyA9IChzdGF0ZTogdW5rbm93bikgPT4ge1xuICBjb25zdCBmb250cyA9IG5ldyBTZXQoW10pXG5cbiAgaXRlcmF0b3Ioc3RhdGUsIChrZXksIHZhbHVlKSA9PiB7XG4gICAgaWYgKGtleSA9PT0gJ2ZvbnRGYW1pbHknKSB7XG4gICAgICBmb250cy5hZGQodmFsdWUpXG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlXG4gIH0pXG5cbiAgY29uc3QgZm9udExpbmtzID0gdXNlTWVtbygoKSA9PiBBcnJheS5mcm9tKGZvbnRzLnZhbHVlcygpKS5tYXAoZm9udCA9PiAoe1xuICAgIHJlbDogJ3N0eWxlc2hlZXQnLFxuICAgIGhyZWY6IGBodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9JHtmb250fTozMDAsNDAwLDUwMCw3MDAmZGlzcGxheT1zd2FwYFxuICB9KSksIFtmb250c10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmb250TGlua3MuZm9yRWFjaCgobGluaykgPT4gaW5qZWN0TGluayhsaW5rKSlcbiAgfSwgW2ZvbnRMaW5rc10pXG59XG4iLCJpbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgRkMsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgJ3NyYy9oZWxwZXJzL3Jlc2V0LnNjc3MnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlR2lmdE9wZW4gfSBmcm9tICdzcmMvaG9va3MvdXNlR2lmdE9wZW4nXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VDb250YWluZXJEZXZpY2UgfSBmcm9tICdzcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuaW1wb3J0IHsgdXNlVG9nZ2xlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVRvZ2dsZSdcbmltcG9ydCBDbG9zZUljb24gZnJvbSAnc3JjL2NvbXBvbmVudHMvQ2xvc2VJY29uJ1xuaW1wb3J0IEdpZnRJY29uIGZyb20gJ3NyYy9jb21wb25lbnRzL0dpZnRJY29uJ1xuaW1wb3J0IHsgdXNlR2lmdFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3Byb21vcy91c2VHaWZ0UnVsZXMnXG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZU1ldHJpY3MnXG5pbXBvcnQgeyB1c2VFeHRyYWN0Rm9udHMgfSBmcm9tICdzcmMvaG9va3MvdXNlRXh0cmFjdEZvbnRzJ1xuaW1wb3J0IHsgbW9kaWZ5U3RhdGUgfSBmcm9tIFwic3JjXCI7XG5cbmNvbnN0IGRhdGEgPSB7XG4gIGlkOiAnc2ltcGxlR2lmdCcsXG4gIG5hbWU6ICdyb290JyxcbiAgcm9vdDoge1xuICAgIGRlc2t0b3A6IHtcbiAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgIGJvb2ttYWtlck5hbWU6ICdib29rbWFrZXInLFxuICAgICAgYm9va21ha2VyU2l0ZTogJ3NpdGUuY29tJyxcbiAgICAgIGJvb2ttYWtlckNvbG9yOiAnIzdlODM5MmZmJyxcbiAgICAgIG9mZmVyOiAne29mZmVyOjY2OTN9JyxcbiAgICAgIGFkZm94U2hvdzogJ2h0dHA6Ly9hZHMuYWRmb3gucnUvMzc3MDg3L2dldENvZGU/cDE9Y3Z6Y3QmcDI9ZnJmZSZwZmM9ZXZmbGUmcGZiPW54YnNzJnByPSVyYW5kb20lJnB0cmM9YicsXG4gICAgICBhZGZveENsaWNrOiAnaHR0cDovL2Fkcy5hZGZveC5ydS8zNzcwODcvZ29MaW5rP3AxPWN2emN0JnAyPWZyZmUmcDU9bnhic3MmcHI9JXJhbmRvbSUnXG4gICAgfSxcbiAgICBsYXB0b3A6IHtcbiAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgIGJvb2ttYWtlck5hbWU6ICdib29rbWFrZXInLFxuICAgICAgYm9va21ha2VyU2l0ZTogJ3NpdGUuY29tJyxcbiAgICAgIGJvb2ttYWtlckNvbG9yOiAnIzdlODM5MmZmJyxcbiAgICAgIG9mZmVyOiAne29mZmVyOjY2OTN9JyxcbiAgICAgIGFkZm94U2hvdzogJ2h0dHA6Ly9hZHMuYWRmb3gucnUvMzc3MDg3L2dldENvZGU/cDE9Y3Z6Y3QmcDI9ZnJmZSZwZmM9ZXZmbGUmcGZiPW54YnNzJnByPSVyYW5kb20lJnB0cmM9YicsXG4gICAgICBhZGZveENsaWNrOiAnaHR0cDovL2Fkcy5hZGZveC5ydS8zNzcwODcvZ29MaW5rP3AxPWN2emN0JnAyPWZyZmUmcDU9bnhic3MmcHI9JXJhbmRvbSUnXG4gICAgfSxcbiAgICB0YWJsZXQ6IHtcbiAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgIGJvb2ttYWtlck5hbWU6ICdib29rbWFrZXInLFxuICAgICAgYm9va21ha2VyU2l0ZTogJ3NpdGUuY29tJyxcbiAgICAgIGJvb2ttYWtlckNvbG9yOiAnIzdlODM5MmZmJyxcbiAgICAgIG9mZmVyOiAne29mZmVyOjY2OTN9JyxcbiAgICAgIGFkZm94U2hvdzogJ2h0dHA6Ly9hZHMuYWRmb3gucnUvMzc3MDg3L2dldENvZGU/cDE9Y3Z6Y3QmcDI9ZnJmZSZwZmM9ZXZmbGUmcGZiPW54YnNzJnByPSVyYW5kb20lJnB0cmM9YicsXG4gICAgICBhZGZveENsaWNrOiAnaHR0cDovL2Fkcy5hZGZveC5ydS8zNzcwODcvZ29MaW5rP3AxPWN2emN0JnAyPWZyZmUmcDU9bnhic3MmcHI9JXJhbmRvbSUnXG4gICAgfSxcbiAgICBtb2JpbGU6IHtcbiAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgIGJvb2ttYWtlck5hbWU6ICdib29rbWFrZXInLFxuICAgICAgYm9va21ha2VyU2l0ZTogJ3NpdGUuY29tJyxcbiAgICAgIGJvb2ttYWtlckNvbG9yOiAnIzdlODM5MmZmJyxcbiAgICAgIG9mZmVyOiAne29mZmVyOjY2OTN9JyxcbiAgICAgIGFkZm94U2hvdzogJ2h0dHA6Ly9hZHMuYWRmb3gucnUvMzc3MDg3L2dldENvZGU/cDE9Y3Z6Y3QmcDI9ZnJmZSZwZmM9ZXZmbGUmcGZiPW54YnNzJnByPSVyYW5kb20lJnB0cmM9YicsXG4gICAgICBhZGZveENsaWNrOiAnaHR0cDovL2Fkcy5hZGZveC5ydS8zNzcwODcvZ29MaW5rP3AxPWN2emN0JnAyPWZyZmUmcDU9bnhic3MmcHI9JXJhbmRvbSUnXG4gICAgfVxuICB9LFxuICBjb250YWluZXI6IHtcbiAgICBkZXNrdG9wOiB7XG4gICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICBjb3JuZXI6IDEwLFxuICAgICAgbGVmdDogJy0zNCcsXG4gICAgICBib3JkZXJXaWR0aDogMixcbiAgICAgIGRlbGF5OiAxMDAwLFxuICAgICAgYm9yZGVyQ29sb3I6ICcjZmVkMDQxJyxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJyMwMDAwMDAnLFxuICAgICAgYmFja2dyb3VuZENvbG9yT3BhY2l0eTogMTAwLFxuICAgICAgbWFyZ2luVG9wOiAwLFxuICAgICAgbWFyZ2luQm90dG9tOiAwLFxuICAgICAgbWFyZ2luTGVmdDogMCxcbiAgICAgIG1hcmdpblJpZ2h0OiAwLFxuICAgICAgcGFkZGluZ1RvcDogMTAsXG4gICAgICBwYWRkaW5nQm90dG9tOiAxMCxcbiAgICAgIHBhZGRpbmdMZWZ0OiAxMCxcbiAgICAgIHBhZGRpbmdSaWdodDogMTBcbiAgICB9LFxuICAgIGxhcHRvcDoge1xuICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgY29ybmVyOiAxMCxcbiAgICAgIGxlZnQ6IC0zMCxcbiAgICAgIGJvcmRlcldpZHRoOiAyLFxuICAgICAgZGVsYXk6IDEwMDAsXG4gICAgICBib3JkZXJDb2xvcjogJyNmZWQwNDEnLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnIzAwMDAwMCcsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3JPcGFjaXR5OiAxMDAsXG4gICAgICBtYXJnaW5Ub3A6IDAsXG4gICAgICBtYXJnaW5Cb3R0b206IDAsXG4gICAgICBtYXJnaW5MZWZ0OiAwLFxuICAgICAgbWFyZ2luUmlnaHQ6IDAsXG4gICAgICBwYWRkaW5nVG9wOiAxMCxcbiAgICAgIHBhZGRpbmdCb3R0b206IDEwLFxuICAgICAgcGFkZGluZ0xlZnQ6IDEwLFxuICAgICAgcGFkZGluZ1JpZ2h0OiAxMFxuICAgIH0sXG4gICAgdGFibGV0OiB7XG4gICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICBjb3JuZXI6IDEwLFxuICAgICAgbGVmdDogLTMwLFxuICAgICAgYm9yZGVyV2lkdGg6IDIsXG4gICAgICBkZWxheTogMTAwMCxcbiAgICAgIGJvcmRlckNvbG9yOiAnI2ZlZDA0MScsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjMDAwMDAwJyxcbiAgICAgIGJhY2tncm91bmRDb2xvck9wYWNpdHk6IDEwMCxcbiAgICAgIG1hcmdpblRvcDogMCxcbiAgICAgIG1hcmdpbkJvdHRvbTogMCxcbiAgICAgIG1hcmdpbkxlZnQ6IDAsXG4gICAgICBtYXJnaW5SaWdodDogMCxcbiAgICAgIHBhZGRpbmdUb3A6IDEwLFxuICAgICAgcGFkZGluZ0JvdHRvbTogMTAsXG4gICAgICBwYWRkaW5nTGVmdDogMTAsXG4gICAgICBwYWRkaW5nUmlnaHQ6IDEwXG4gICAgfSxcbiAgICBtb2JpbGU6IHtcbiAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgIGNvcm5lcjogMTAsXG4gICAgICBsZWZ0OiAnLTIxNScsXG4gICAgICBib3JkZXJXaWR0aDogMixcbiAgICAgIGRlbGF5OiAxMDAwLFxuICAgICAgYm9yZGVyQ29sb3I6ICcjZmVkMDQxJyxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJyMwMDAwMDAnLFxuICAgICAgYmFja2dyb3VuZENvbG9yT3BhY2l0eTogMTAwLFxuICAgICAgbWFyZ2luVG9wOiAwLFxuICAgICAgbWFyZ2luQm90dG9tOiAwLFxuICAgICAgbWFyZ2luTGVmdDogMCxcbiAgICAgIG1hcmdpblJpZ2h0OiAwLFxuICAgICAgcGFkZGluZ1RvcDogMTAsXG4gICAgICBwYWRkaW5nQm90dG9tOiAxMCxcbiAgICAgIHBhZGRpbmdMZWZ0OiAxMCxcbiAgICAgIHBhZGRpbmdSaWdodDogMTBcbiAgICB9XG4gIH0sXG4gIGNsb3NlOiB7XG4gICAgZGVza3RvcDoge1xuICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgY29sb3I6ICcjZmZmJ1xuICAgIH0sXG4gICAgbGFwdG9wOiB7XG4gICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICBjb2xvcjogJyNmZmYnXG4gICAgfSxcbiAgICB0YWJsZXQ6IHtcbiAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgIGNvbG9yOiAnI2ZmZidcbiAgICB9LFxuICAgIG1vYmlsZToge1xuICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgY29sb3I6ICcjZmZmJ1xuICAgIH1cbiAgfSxcbiAgdGV4dDoge1xuICAgIGRlc2t0b3A6IHtcbiAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgIGNoaWxkcmVuOiAnQk9OTyBERSBQUklNRVIgREVQw5NTSVRPIFxcbkRFIEhBU1RBIHt7Uy81MDB9fScsXG4gICAgICB0eXBvZ3JhcGh5OiB7XG4gICAgICAgIGNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgIGZvbnRGYW1pbHk6ICdSb2JvdG8nLFxuICAgICAgICBpc0JvbGQ6IHRydWUsXG4gICAgICAgIGlzSXRhbGljOiBmYWxzZSxcbiAgICAgICAgaXNUaHJvdWdoOiBmYWxzZSxcbiAgICAgICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgICAgIGZvbnRTaXplOiAxMSxcbiAgICAgICAgbGluZUhlaWdodDogMS4yLFxuICAgICAgICBsZXR0ZXJTcGFjaW5nOiAwXG4gICAgICB9LFxuICAgICAgYWNjZW50VHlwb2dyYXBoeToge1xuICAgICAgICBjb2xvcjogJyNmZWQwNDEnLFxuICAgICAgICBmb250RmFtaWx5OiAnUm9ib3RvJyxcbiAgICAgICAgaXNCb2xkOiB0cnVlLFxuICAgICAgICBpc0l0YWxpYzogZmFsc2UsXG4gICAgICAgIGlzVGhyb3VnaDogZmFsc2UsXG4gICAgICAgIHRleHRBbGlnbjogJ2xlZnQnLFxuICAgICAgICBmb250U2l6ZTogMTQsXG4gICAgICAgIGxpbmVIZWlnaHQ6IDEuMixcbiAgICAgICAgbGV0dGVyU3BhY2luZzogMFxuICAgICAgfVxuICAgIH0sXG4gICAgbGFwdG9wOiB7XG4gICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICBjaGlsZHJlbjogJ0JPTk8gREUgUFJJTUVSIERFUMOTU0lUTyBcXG5ERSBIQVNUQSB7e1MvNTAwfX0nLFxuICAgICAgdHlwb2dyYXBoeToge1xuICAgICAgICBjb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICBmb250RmFtaWx5OiAnUm9ib3RvJyxcbiAgICAgICAgaXNCb2xkOiB0cnVlLFxuICAgICAgICBpc0l0YWxpYzogZmFsc2UsXG4gICAgICAgIGlzVGhyb3VnaDogZmFsc2UsXG4gICAgICAgIHRleHRBbGlnbjogJ2xlZnQnLFxuICAgICAgICBmb250U2l6ZTogMTEsXG4gICAgICAgIGxpbmVIZWlnaHQ6IDEuMixcbiAgICAgICAgbGV0dGVyU3BhY2luZzogMFxuICAgICAgfSxcbiAgICAgIGFjY2VudFR5cG9ncmFwaHk6IHtcbiAgICAgICAgY29sb3I6ICcjZmVkMDQxJyxcbiAgICAgICAgZm9udEZhbWlseTogJ1JvYm90bycsXG4gICAgICAgIGlzQm9sZDogdHJ1ZSxcbiAgICAgICAgaXNJdGFsaWM6IGZhbHNlLFxuICAgICAgICBpc1Rocm91Z2g6IGZhbHNlLFxuICAgICAgICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgICAgICAgZm9udFNpemU6IDE0LFxuICAgICAgICBsaW5lSGVpZ2h0OiAxLjIsXG4gICAgICAgIGxldHRlclNwYWNpbmc6IDBcbiAgICAgIH1cbiAgICB9LFxuICAgIHRhYmxldDoge1xuICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgY2hpbGRyZW46ICdCT05PIERFIFBSSU1FUiBERVDDk1NJVE8gXFxuREUgSEFTVEEge3tTLzUwMH19JyxcbiAgICAgIHR5cG9ncmFwaHk6IHtcbiAgICAgICAgY29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgZm9udEZhbWlseTogJ1JvYm90bycsXG4gICAgICAgIGlzQm9sZDogdHJ1ZSxcbiAgICAgICAgaXNJdGFsaWM6IGZhbHNlLFxuICAgICAgICBpc1Rocm91Z2g6IGZhbHNlLFxuICAgICAgICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgICAgICAgZm9udFNpemU6IDExLFxuICAgICAgICBsaW5lSGVpZ2h0OiAxLjIsXG4gICAgICAgIGxldHRlclNwYWNpbmc6IDBcbiAgICAgIH0sXG4gICAgICBhY2NlbnRUeXBvZ3JhcGh5OiB7XG4gICAgICAgIGNvbG9yOiAnI2ZlZDA0MScsXG4gICAgICAgIGZvbnRGYW1pbHk6ICdSb2JvdG8nLFxuICAgICAgICBpc0JvbGQ6IHRydWUsXG4gICAgICAgIGlzSXRhbGljOiBmYWxzZSxcbiAgICAgICAgaXNUaHJvdWdoOiBmYWxzZSxcbiAgICAgICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgICAgIGZvbnRTaXplOiAxNCxcbiAgICAgICAgbGluZUhlaWdodDogMS4yLFxuICAgICAgICBsZXR0ZXJTcGFjaW5nOiAwXG4gICAgICB9XG4gICAgfSxcbiAgICBtb2JpbGU6IHtcbiAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgIGNoaWxkcmVuOiAnQk9OTyBERSBQUklNRVIgREVQw5NTSVRPIFxcbkRFIEhBU1RBIHt7Uy81MDB9fScsXG4gICAgICB0eXBvZ3JhcGh5OiB7XG4gICAgICAgIGNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgIGZvbnRGYW1pbHk6ICdSb2JvdG8nLFxuICAgICAgICBpc0JvbGQ6IHRydWUsXG4gICAgICAgIGlzSXRhbGljOiBmYWxzZSxcbiAgICAgICAgaXNUaHJvdWdoOiBmYWxzZSxcbiAgICAgICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgICAgIGZvbnRTaXplOiAxMSxcbiAgICAgICAgbGluZUhlaWdodDogMS4yLFxuICAgICAgICBsZXR0ZXJTcGFjaW5nOiAwXG4gICAgICB9LFxuICAgICAgYWNjZW50VHlwb2dyYXBoeToge1xuICAgICAgICBjb2xvcjogJyNmZWQwNDEnLFxuICAgICAgICBmb250RmFtaWx5OiAnUm9ib3RvJyxcbiAgICAgICAgaXNCb2xkOiB0cnVlLFxuICAgICAgICBpc0l0YWxpYzogZmFsc2UsXG4gICAgICAgIGlzVGhyb3VnaDogZmFsc2UsXG4gICAgICAgIHRleHRBbGlnbjogJ2xlZnQnLFxuICAgICAgICBmb250U2l6ZTogMTQsXG4gICAgICAgIGxpbmVIZWlnaHQ6IDEuMixcbiAgICAgICAgbGV0dGVyU3BhY2luZzogMFxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgYnV0dG9uOiB7XG4gICAgZGVza3RvcDoge1xuICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnI2ZlZDA0MScsXG4gICAgICBiYWNrZ3JvdW5kT3BhY2l0eTogJzEwMDAwMDAnLFxuICAgICAgYm9yZGVyV2lkdGg6ICcyJyxcbiAgICAgIGJvcmRlckNvbG9yOiAnIzMzMycsXG4gICAgICBjb3JuZXI6IDEwLFxuICAgICAgaXNBbmltYXRlZDogdHJ1ZSxcbiAgICAgIGNoaWxkcmVuOiAnw5pORVRFIEFIT1JBJyxcbiAgICAgIGNvbG9yOiAnIzAwMDAwMCcsXG4gICAgICBmb250RmFtaWx5OiAnUm9ib3RvJyxcbiAgICAgIGlzQm9sZDogdHJ1ZSxcbiAgICAgIGlzSXRhbGljOiBmYWxzZSxcbiAgICAgIGlzVGhyb3VnaDogZmFsc2UsXG4gICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgZm9udFNpemU6IDE0LFxuICAgICAgbGluZUhlaWdodDogMixcbiAgICAgIGxldHRlclNwYWNpbmc6IDAsXG4gICAgICBtYXJnaW5Ub3A6IDAsXG4gICAgICBtYXJnaW5Cb3R0b206IDAsXG4gICAgICBtYXJnaW5MZWZ0OiAwLFxuICAgICAgbWFyZ2luUmlnaHQ6IDAsXG4gICAgICBwYWRkaW5nVG9wOiAwLFxuICAgICAgcGFkZGluZ0JvdHRvbTogMCxcbiAgICAgIHBhZGRpbmdMZWZ0OiAwLFxuICAgICAgcGFkZGluZ1JpZ2h0OiAwXG4gICAgfSxcbiAgICBsYXB0b3A6IHtcbiAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJyNmZWQwNDEnLFxuICAgICAgYmFja2dyb3VuZE9wYWNpdHk6IDEwMCxcbiAgICAgIGJvcmRlcldpZHRoOiAwLFxuICAgICAgYm9yZGVyQ29sb3I6ICcjMzMzJyxcbiAgICAgIGNvcm5lcjogMTAsXG4gICAgICBpc0FuaW1hdGVkOiB0cnVlLFxuICAgICAgY2hpbGRyZW46ICfDmk5FVEUgQUhPUkEnLFxuICAgICAgY29sb3I6ICcjMDAwMDAwJyxcbiAgICAgIGZvbnRGYW1pbHk6ICdSb2JvdG8nLFxuICAgICAgaXNCb2xkOiB0cnVlLFxuICAgICAgaXNJdGFsaWM6IGZhbHNlLFxuICAgICAgaXNUaHJvdWdoOiBmYWxzZSxcbiAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICBmb250U2l6ZTogMTQsXG4gICAgICBsaW5lSGVpZ2h0OiAyLFxuICAgICAgbGV0dGVyU3BhY2luZzogMCxcbiAgICAgIG1hcmdpblRvcDogMCxcbiAgICAgIG1hcmdpbkJvdHRvbTogMCxcbiAgICAgIG1hcmdpbkxlZnQ6IDAsXG4gICAgICBtYXJnaW5SaWdodDogMCxcbiAgICAgIHBhZGRpbmdUb3A6IDAsXG4gICAgICBwYWRkaW5nQm90dG9tOiAwLFxuICAgICAgcGFkZGluZ0xlZnQ6IDAsXG4gICAgICBwYWRkaW5nUmlnaHQ6IDBcbiAgICB9LFxuICAgIHRhYmxldDoge1xuICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnI2ZlZDA0MScsXG4gICAgICBiYWNrZ3JvdW5kT3BhY2l0eTogMTAwLFxuICAgICAgYm9yZGVyV2lkdGg6IDAsXG4gICAgICBib3JkZXJDb2xvcjogJyMzMzMnLFxuICAgICAgY29ybmVyOiAxMCxcbiAgICAgIGlzQW5pbWF0ZWQ6IHRydWUsXG4gICAgICBjaGlsZHJlbjogJ8OaTkVURSBBSE9SQScsXG4gICAgICBjb2xvcjogJyMwMDAwMDAnLFxuICAgICAgZm9udEZhbWlseTogJ1JvYm90bycsXG4gICAgICBpc0JvbGQ6IHRydWUsXG4gICAgICBpc0l0YWxpYzogZmFsc2UsXG4gICAgICBpc1Rocm91Z2g6IGZhbHNlLFxuICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgIGZvbnRTaXplOiAxNCxcbiAgICAgIGxpbmVIZWlnaHQ6IDIsXG4gICAgICBsZXR0ZXJTcGFjaW5nOiAwLFxuICAgICAgbWFyZ2luVG9wOiAwLFxuICAgICAgbWFyZ2luQm90dG9tOiAwLFxuICAgICAgbWFyZ2luTGVmdDogMCxcbiAgICAgIG1hcmdpblJpZ2h0OiAwLFxuICAgICAgcGFkZGluZ1RvcDogMCxcbiAgICAgIHBhZGRpbmdCb3R0b206IDAsXG4gICAgICBwYWRkaW5nTGVmdDogMCxcbiAgICAgIHBhZGRpbmdSaWdodDogMFxuICAgIH0sXG4gICAgbW9iaWxlOiB7XG4gICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmVkMDQxJyxcbiAgICAgIGJhY2tncm91bmRPcGFjaXR5OiAxMDAsXG4gICAgICBib3JkZXJXaWR0aDogMCxcbiAgICAgIGJvcmRlckNvbG9yOiAnIzMzMycsXG4gICAgICBjb3JuZXI6IDEwLFxuICAgICAgaXNBbmltYXRlZDogdHJ1ZSxcbiAgICAgIGNoaWxkcmVuOiAnw5pORVRFIEFIT1JBJyxcbiAgICAgIGNvbG9yOiAnIzAwMDAwMCcsXG4gICAgICBmb250RmFtaWx5OiAnUm9ib3RvJyxcbiAgICAgIGlzQm9sZDogdHJ1ZSxcbiAgICAgIGlzSXRhbGljOiBmYWxzZSxcbiAgICAgIGlzVGhyb3VnaDogZmFsc2UsXG4gICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgZm9udFNpemU6IDE0LFxuICAgICAgbGluZUhlaWdodDogMixcbiAgICAgIGxldHRlclNwYWNpbmc6IDAsXG4gICAgICBtYXJnaW5Ub3A6IDAsXG4gICAgICBtYXJnaW5Cb3R0b206IDAsXG4gICAgICBtYXJnaW5MZWZ0OiAwLFxuICAgICAgbWFyZ2luUmlnaHQ6IDAsXG4gICAgICBwYWRkaW5nVG9wOiAwLFxuICAgICAgcGFkZGluZ0JvdHRvbTogMCxcbiAgICAgIHBhZGRpbmdMZWZ0OiAwLFxuICAgICAgcGFkZGluZ1JpZ2h0OiAwXG4gICAgfVxuICB9LFxuICBsZWdhbDoge1xuICAgIGRlc2t0b3A6IHtcbiAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJyMwMDIwNDQnLFxuICAgICAgYmFja2dyb3VuZE9wYWNpdHk6IDEwMCxcbiAgICAgIGNvcm5lcjogMTAsXG4gICAgICBib3JkZXJXaWR0aDogMCxcbiAgICAgIGJvcmRlckNvbG9yOiAnIzJhZDU2NicsXG4gICAgICBjaGlsZHJlbjogbnVsbCxcbiAgICAgIGNvbG9yOiAnI2ZmZmZmZicsXG4gICAgICBmb250RmFtaWx5OiAnUm9ib3RvJyxcbiAgICAgIGlzQm9sZDogZmFsc2UsXG4gICAgICBpc0l0YWxpYzogZmFsc2UsXG4gICAgICBpc1Rocm91Z2g6IGZhbHNlLFxuICAgICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgICBmb250U2l6ZTogMTAsXG4gICAgICBsaW5lSGVpZ2h0OiAnMScsXG4gICAgICBsZXR0ZXJTcGFjaW5nOiAnMCcsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3JPcGFjaXR5OiAxMDAsXG4gICAgICBtYXJnaW5Ub3A6IDAsXG4gICAgICBtYXJnaW5Cb3R0b206IDAsXG4gICAgICBtYXJnaW5MZWZ0OiAwLFxuICAgICAgbWFyZ2luUmlnaHQ6IDAsXG4gICAgICBwYWRkaW5nVG9wOiA0LFxuICAgICAgcGFkZGluZ0JvdHRvbTogNCxcbiAgICAgIHBhZGRpbmdMZWZ0OiA1LFxuICAgICAgcGFkZGluZ1JpZ2h0OiA1LFxuICAgICAgYnV0dG9uT3BlblRleHQ6ICdIaWRlJyxcbiAgICAgIGJ1dHRvbkhpZGVUZXh0OiAnU2hvdydcbiAgICB9LFxuICAgIGxhcHRvcDoge1xuICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnIzAwMjA0NCcsXG4gICAgICBiYWNrZ3JvdW5kT3BhY2l0eTogMTAwLFxuICAgICAgY29ybmVyOiAxMCxcbiAgICAgIGJvcmRlcldpZHRoOiAwLFxuICAgICAgYm9yZGVyQ29sb3I6ICcjMzMzJyxcbiAgICAgIGNoaWxkcmVuOiBudWxsLFxuICAgICAgY29sb3I6ICcjZmZmZmZmJyxcbiAgICAgIGZvbnRGYW1pbHk6ICdSb2JvdG8nLFxuICAgICAgaXNCb2xkOiBmYWxzZSxcbiAgICAgIGlzSXRhbGljOiBmYWxzZSxcbiAgICAgIGlzVGhyb3VnaDogZmFsc2UsXG4gICAgICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgICAgIGZvbnRTaXplOiAxMCxcbiAgICAgIGxpbmVIZWlnaHQ6IDEuMixcbiAgICAgIGxldHRlclNwYWNpbmc6IDAsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3JPcGFjaXR5OiAxMDAsXG4gICAgICBtYXJnaW5Ub3A6IDAsXG4gICAgICBtYXJnaW5Cb3R0b206IDAsXG4gICAgICBtYXJnaW5MZWZ0OiAwLFxuICAgICAgbWFyZ2luUmlnaHQ6IDAsXG4gICAgICBwYWRkaW5nVG9wOiA0LFxuICAgICAgcGFkZGluZ0JvdHRvbTogNCxcbiAgICAgIHBhZGRpbmdMZWZ0OiA1LFxuICAgICAgcGFkZGluZ1JpZ2h0OiA1LFxuICAgICAgYnV0dG9uT3BlblRleHQ6ICdIaWRlJyxcbiAgICAgIGJ1dHRvbkhpZGVUZXh0OiAnU2hvdydcbiAgICB9LFxuICAgIHRhYmxldDoge1xuICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnIzAwMjA0NCcsXG4gICAgICBiYWNrZ3JvdW5kT3BhY2l0eTogMTAwLFxuICAgICAgY29ybmVyOiAxMCxcbiAgICAgIGJvcmRlcldpZHRoOiAwLFxuICAgICAgYm9yZGVyQ29sb3I6ICcjMzMzJyxcbiAgICAgIGNoaWxkcmVuOiBudWxsLFxuICAgICAgY29sb3I6ICcjZmZmZmZmJyxcbiAgICAgIGZvbnRGYW1pbHk6ICdSb2JvdG8nLFxuICAgICAgaXNCb2xkOiBmYWxzZSxcbiAgICAgIGlzSXRhbGljOiBmYWxzZSxcbiAgICAgIGlzVGhyb3VnaDogZmFsc2UsXG4gICAgICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgICAgIGZvbnRTaXplOiAxMCxcbiAgICAgIGxpbmVIZWlnaHQ6IDEuMixcbiAgICAgIGxldHRlclNwYWNpbmc6IDAsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3JPcGFjaXR5OiAxMDAsXG4gICAgICBtYXJnaW5Ub3A6IDAsXG4gICAgICBtYXJnaW5Cb3R0b206IDAsXG4gICAgICBtYXJnaW5MZWZ0OiAwLFxuICAgICAgbWFyZ2luUmlnaHQ6IDAsXG4gICAgICBwYWRkaW5nVG9wOiA0LFxuICAgICAgcGFkZGluZ0JvdHRvbTogNCxcbiAgICAgIHBhZGRpbmdMZWZ0OiA1LFxuICAgICAgcGFkZGluZ1JpZ2h0OiA1LFxuICAgICAgYnV0dG9uT3BlblRleHQ6ICdIaWRlJyxcbiAgICAgIGJ1dHRvbkhpZGVUZXh0OiAnU2hvdydcbiAgICB9LFxuICAgIG1vYmlsZToge1xuICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnIzAwMjA0NCcsXG4gICAgICBiYWNrZ3JvdW5kT3BhY2l0eTogMTAwLFxuICAgICAgY29ybmVyOiAxMCxcbiAgICAgIGJvcmRlcldpZHRoOiAwLFxuICAgICAgYm9yZGVyQ29sb3I6ICcjMzMzJyxcbiAgICAgIGNoaWxkcmVuOiBudWxsLFxuICAgICAgY29sb3I6ICcjZmZmZmZmJyxcbiAgICAgIGZvbnRGYW1pbHk6ICdSb2JvdG8nLFxuICAgICAgaXNCb2xkOiBmYWxzZSxcbiAgICAgIGlzSXRhbGljOiBmYWxzZSxcbiAgICAgIGlzVGhyb3VnaDogZmFsc2UsXG4gICAgICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgICAgIGZvbnRTaXplOiAxMCxcbiAgICAgIGxpbmVIZWlnaHQ6IDEuMixcbiAgICAgIGxldHRlclNwYWNpbmc6IDAsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3JPcGFjaXR5OiAxMDAsXG4gICAgICBtYXJnaW5Ub3A6IDAsXG4gICAgICBtYXJnaW5Cb3R0b206IDAsXG4gICAgICBtYXJnaW5MZWZ0OiAwLFxuICAgICAgbWFyZ2luUmlnaHQ6IDAsXG4gICAgICBwYWRkaW5nVG9wOiA0LFxuICAgICAgcGFkZGluZ0JvdHRvbTogNCxcbiAgICAgIHBhZGRpbmdMZWZ0OiA1LFxuICAgICAgcGFkZGluZ1JpZ2h0OiA1LFxuICAgICAgYnV0dG9uT3BlblRleHQ6ICdIaWRlJyxcbiAgICAgIGJ1dHRvbkhpZGVUZXh0OiAnU2hvdydcbiAgICB9XG4gIH0sXG4gIGxvZ286IHtcbiAgICBkZXNrdG9wOiB7XG4gICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICBtaW5XaWR0aDogNjAsXG4gICAgICBoZWlnaHQ6IDE1LFxuICAgICAgY29ybmVyOiAwLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnI2VlZScsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3JPcGFjaXR5OiAwLFxuICAgICAgYmFja2dyb3VuZEltYWdlOiAnaHR0cHM6Ly9jZG4uc3RhdmthLnR2L3N0YXRpYy9iay9mcm9hbGEvNzdhLzFmYS8yYTg5YTMxNThjNTg5ZWRhYjE4NzRhZTc4N2E4YzRhMTY4LnBuZycsXG4gICAgICBiYWNrZ3JvdW5kRml0OiAnY29udGFpbidcbiAgICB9LFxuICAgIGxhcHRvcDoge1xuICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgbWluV2lkdGg6IDYwLFxuICAgICAgaGVpZ2h0OiAxNSxcbiAgICAgIGNvcm5lcjogMCxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJyNlZWUnLFxuICAgICAgYmFja2dyb3VuZENvbG9yT3BhY2l0eTogMCxcbiAgICAgIGJhY2tncm91bmRJbWFnZTogJ2h0dHBzOi8vY2RuLnN0YXZrYS50di9zdGF0aWMvYmsvZnJvYWxhLzc3YS8xZmEvMmE4OWEzMTU4YzU4OWVkYWIxODc0YWU3ODdhOGM0YTE2OC5wbmcnLFxuICAgICAgYmFja2dyb3VuZEZpdDogJ2NvbnRhaW4nXG4gICAgfSxcbiAgICB0YWJsZXQ6IHtcbiAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgIG1pbldpZHRoOiA2MCxcbiAgICAgIGhlaWdodDogMTUsXG4gICAgICBjb3JuZXI6IDAsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZWVlJyxcbiAgICAgIGJhY2tncm91bmRDb2xvck9wYWNpdHk6IDAsXG4gICAgICBiYWNrZ3JvdW5kSW1hZ2U6ICdodHRwczovL2Nkbi5zdGF2a2EudHYvc3RhdGljL2JrL2Zyb2FsYS83N2EvMWZhLzJhODlhMzE1OGM1ODllZGFiMTg3NGFlNzg3YThjNGExNjgucG5nJyxcbiAgICAgIGJhY2tncm91bmRGaXQ6ICdjb250YWluJ1xuICAgIH0sXG4gICAgbW9iaWxlOiB7XG4gICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICBtaW5XaWR0aDogNjAsXG4gICAgICBoZWlnaHQ6IDE1LFxuICAgICAgY29ybmVyOiAwLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnI2VlZScsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3JPcGFjaXR5OiAwLFxuICAgICAgYmFja2dyb3VuZEltYWdlOiAnaHR0cHM6Ly9jZG4uc3RhdmthLnR2L3N0YXRpYy9iay9mcm9hbGEvNzdhLzFmYS8yYTg5YTMxNThjNTg5ZWRhYjE4NzRhZTc4N2E4YzRhMTY4LnBuZycsXG4gICAgICBiYWNrZ3JvdW5kRml0OiAnY29udGFpbidcbiAgICB9XG4gIH0sXG4gIGljb246IHtcbiAgICBkZXNrdG9wOiB7XG4gICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICBoYXNJY29uOiB0cnVlLFxuICAgICAgYW5pbWF0aW9uczogWydncmFkaWVudCddLFxuICAgICAgZ3JhZGllbnRDb2xvcjogJyNmZWQwNDEnLFxuICAgICAgYm9yZGVyV2lkdGg6IDAsXG4gICAgICBib3JkZXJDb2xvcjogJyNmODI1MjUnLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnIzAwMDAwMCcsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3JPcGFjaXR5OiAxMDBcbiAgICB9LFxuICAgIGxhcHRvcDoge1xuICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgaGFzSWNvbjogdHJ1ZSxcbiAgICAgIGFuaW1hdGlvbnM6IFsnZ3JhZGllbnQnXSxcbiAgICAgIGdyYWRpZW50Q29sb3I6ICcjZmVkMDQxJyxcbiAgICAgIGJvcmRlcldpZHRoOiAwLFxuICAgICAgYm9yZGVyQ29sb3I6ICcjZmZmJyxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJyMwMDAwMDAnLFxuICAgICAgYmFja2dyb3VuZENvbG9yT3BhY2l0eTogMTAwXG4gICAgfSxcbiAgICB0YWJsZXQ6IHtcbiAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgIGhhc0ljb246IHRydWUsXG4gICAgICBhbmltYXRpb25zOiBbJ2dyYWRpZW50J10sXG4gICAgICBncmFkaWVudENvbG9yOiAnI2ZlZDA0MScsXG4gICAgICBib3JkZXJXaWR0aDogMCxcbiAgICAgIGJvcmRlckNvbG9yOiAnI2ZmZicsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjMDAwMDAwJyxcbiAgICAgIGJhY2tncm91bmRDb2xvck9wYWNpdHk6IDEwMFxuICAgIH0sXG4gICAgbW9iaWxlOiB7XG4gICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICBoYXNJY29uOiB0cnVlLFxuICAgICAgYW5pbWF0aW9uczogWydncmFkaWVudCddLFxuICAgICAgZ3JhZGllbnRDb2xvcjogJyNmZWQwNDEnLFxuICAgICAgYm9yZGVyV2lkdGg6IDAsXG4gICAgICBib3JkZXJDb2xvcjogJyNmZmYnLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnIzAwMDAwMCcsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3JPcGFjaXR5OiAxMDBcbiAgICB9XG4gIH1cbn1cblxuXG5cbmNvbnN0IFNpbXBsZUdpZnQ6IEZDPFN0YXRlPiA9ICgpID0+IHtcbiAgY29uc3Qgcm9vdFJlZiA9IHVzZVJlZihudWxsKVxuICBjb25zdCBbbGVnYWxJc09wZW4sIHRvZ2dsZUxlZ2FsSXNPcGVuXSA9IHVzZVRvZ2dsZSgpXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlPFN0YXRlPigpXG4gIGNvbnN0IGRldmljZSA9IHVzZUNvbnRhaW5lckRldmljZSh7IHRhcmdldFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBkZXZpY2VTdGF0ZSA9IHVzZUdldFJ1bGVzKHN0YXRlLCBkZXZpY2UpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcbiAgY29uc3Qgb25DbGljayA9IHVzZU1ldHJpY3MoZGV2aWNlU3RhdGUpXG4gIGNvbnN0IHsgaXNPcGVuLCBvblRvZ2dsZSB9ID0gdXNlR2lmdE9wZW4oZGV2aWNlU3RhdGU/LmNvbnRhaW5lcj8uZGVsYXkpXG4gIGNvbnN0IHsgaGFzSWNvbiwgaWNvblJ1bGVzLCBib2R5UnVsZXMsIGFycm93UnVsZXMgfSA9IHVzZUdpZnRSdWxlcyhkZXZpY2VTdGF0ZSwge1xuICAgIGZhZGU6IHN0eWxlcy5mYWRlaW4sXG4gICAgcHVsc2U6IHN0eWxlcy5wdWxzZSxcbiAgICB3aWdnbGU6IHN0eWxlcy53aWdnbGUsXG4gICAgZ3JhZGllbnQ6IHN0eWxlcy5ncmFkaWVudFxuICB9KVxuICB1c2VFeHRyYWN0Rm9udHMoZGV2aWNlU3RhdGUpXG5cbiAgY29uc3QgbmV3U3RhdGUgPSBtb2RpZnlTdGF0ZShkYXRhLCAnY29udGFpbmVyJywgJ2xlZnQnLCBwcmV2ID0+ICh0cnVlID8gK3ByZXYgKyAyMCA6IHByZXYpLCBbJ21vYmlsZSddKVxuICBjb25zb2xlLmxvZyhuZXdTdGF0ZS5jb250YWluZXIubW9iaWxlLmxlZnQpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yb290fSByZWY9e3Jvb3RSZWZ9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pY29ufSBzdHlsZT17aWNvblJ1bGVzfSBvbkNsaWNrPXtvblRvZ2dsZX0+XG4gICAgICAgIHtoYXNJY29uICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmljb25UYXJnZXR9PlxuICAgICAgICAgICAgPEdpZnRJY29uIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5ib2R5LCB7IFtzdHlsZXMuYm9keU9wZW5dOiBpc09wZW4gfSl9IHN0eWxlPXtib2R5UnVsZXN9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmFycm93fSBzdHlsZT17YXJyb3dSdWxlc30+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY2xvc2V9IHN0eWxlPXtydWxlcy5jbG9zZX0gb25DbGljaz17b25Ub2dnbGV9PlxuICAgICAgICAgIDxDbG9zZUljb24gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGFpbmVyfSBzdHlsZT17cnVsZXMuY29udGFpbmVyfT5cbiAgICAgICAgICA8YSBocmVmPXtydWxlcy5yb290Py5vZmZlcn0gdGFyZ2V0PSdfYmxhbmsnIHJlbD0nbm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlcicgb25DbGljaz17b25DbGlja30+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmlubmVyfT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30+PC9kaXY+XG4gICAgICAgICAgICAgIDxEaXNwbGF5VGV4dCBjbGFzc05hbWU9e3N0eWxlcy50ZXh0fSBzdHlsZT17cnVsZXMudGV4dH0+XG4gICAgICAgICAgICAgICAge3J1bGVzPy50ZXh0Py5jaGlsZHJlbn1cbiAgICAgICAgICAgICAgPC9EaXNwbGF5VGV4dD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLmJ1dHRvbiwge1xuICAgICAgICAgICAgICBbc3R5bGVzLmJ1dHRvbkFuaW1hdGVkXTogcnVsZXMuYnV0dG9uLmlzQW5pbWF0ZWRcbiAgICAgICAgICAgIH0pfSBzdHlsZT17cnVsZXMuYnV0dG9ufT5cbiAgICAgICAgICAgICAge3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2E+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5sZWdhbCwge1xuICAgICAgICAgICAgICBbc3R5bGVzLmxlZ2FsT3Blbl06IGxlZ2FsSXNPcGVuXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIHN0eWxlPXtydWxlcy5sZWdhbH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbFRleHR9PlxuICAgICAgICAgICAgICA8c3Bhbj57cnVsZXM/LmxlZ2FsPy5jaGlsZHJlbn08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsQnV0dG9ufSBvbkNsaWNrPXt0b2dnbGVMZWdhbElzT3Blbn0+XG4gICAgICAgICAgICAgICAge2xlZ2FsSXNPcGVuID8gcnVsZXM/LmxlZ2FsPy5idXR0b25PcGVuVGV4dCA6IHJ1bGVzPy5sZWdhbD8uYnV0dG9uSGlkZVRleHR9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPFNpbXBsZUdpZnQgLz4pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgRGlzcGxheVRleHQgZnJvbSAnc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQnXG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZU1ldHJpY3MnXG5cbmNvbnN0IEJvbnVzQ2FyZDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuICBjb25zdCBvbkNsaWNrID0gdXNlTWV0cmljcyhzdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgcmVsPSdub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyJ1xuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMudmFyaWFudDJdOiBydWxlcy5yb290Py52YXJpYW50ID09PSAndmFyaWFudDInXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtydWxlcy5yb290fVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxpbmV9IHN0eWxlPXtydWxlcy5saW5lfSAvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHlJbm5lcn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRleHR9IHN0eWxlPXtydWxlcy50ZXh0fT5cbiAgICAgICAgICAgIDxEaXNwbGF5VGV4dD57cnVsZXMudGV4dD8uY2hpbGRyZW59PC9EaXNwbGF5VGV4dD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b259IHN0eWxlPXtydWxlcy5idXR0b259PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b25UZXh0fT57cnVsZXMuYnV0dG9uPy5jaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVnYWx9IHN0eWxlPXtydWxlcy5sZWdhbH0+XG4gICAgICAgIHtydWxlcy5sZWdhbD8uY2hpbGRyZW59XG4gICAgICA8L2Rpdj5cbiAgICA8L2E+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgQm9udXNDYXJkXG4iLCJpbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCAnc3JjL2hlbHBlcnMvcmVzZXQuc2NzcydcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VHaWZ0T3BlbiB9IGZyb20gJ3NyYy9ob29rcy91c2VHaWZ0T3BlbidcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VHZXRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgQ2xvc2VJY29uIGZyb20gJ3NyYy9jb21wb25lbnRzL0Nsb3NlSWNvbidcbmltcG9ydCBHaWZ0SWNvbiBmcm9tICdzcmMvY29tcG9uZW50cy9HaWZ0SWNvbidcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCBCb251c0NhcmQgZnJvbSAnLi9jb21wb25lbnRzL0JvbnVzQ2FyZCdcbmltcG9ydCB7IHVzZUV4dHJhY3RGb250cyB9IGZyb20gJ3NyYy9ob29rcy91c2VFeHRyYWN0Rm9udHMnXG5pbXBvcnQgeyB1c2VHaWZ0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvcHJvbW9zL3VzZUdpZnRSdWxlcydcblxuY29uc3QgQ29tcGxleEdpZnQgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgeyBpc09wZW4sIG9uVG9nZ2xlIH0gPSB1c2VHaWZ0T3BlbigpXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgdGFyZ2V0UmVmOiByb290UmVmIH0pXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuICB1c2VFeHRyYWN0Rm9udHMoZGV2aWNlU3RhdGUpXG4gIGNvbnN0IHsgaGFzSWNvbiwgaWNvblJ1bGVzLCBib2R5UnVsZXMsIGFycm93UnVsZXMgfSA9IHVzZUdpZnRSdWxlcyhkZXZpY2VTdGF0ZSwge1xuICAgIGZhZGU6IHN0eWxlcy5mYWRlaW4sXG4gICAgcHVsc2U6IHN0eWxlcy5wdWxzZSxcbiAgICB3aWdnbGU6IHN0eWxlcy53aWdnbGUsXG4gICAgZ3JhZGllbnQ6IHN0eWxlcy5ncmFkaWVudCxcbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgcmVmPXtyb290UmVmfSBjbGFzc05hbWU9e3N0eWxlcy5yb290fT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaWNvbn0gc3R5bGU9e2ljb25SdWxlc30gb25DbGljaz17b25Ub2dnbGV9PlxuICAgICAgICB7aGFzSWNvbiAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pY29uVGFyZ2V0fT5cbiAgICAgICAgICAgIDxHaWZ0SWNvbiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMuYm9keSwge1xuICAgICAgICAgIFtzdHlsZXMuYm9keU9wZW5dOiBpc09wZW5cbiAgICAgICAgfSl9XG4gICAgICAgIHN0eWxlPXtib2R5UnVsZXN9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYXJyb3d9IHN0eWxlPXthcnJvd1J1bGVzfSAvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRhaW5lcn0gc3R5bGU9e3J1bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jbG9zZX0gc3R5bGU9e3J1bGVzLmNsb3NlfSBvbkNsaWNrPXtvblRvZ2dsZX0+XG4gICAgICAgICAgICA8Q2xvc2VJY29uIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5wcm9tb3Rpb259IHN0eWxlPXtydWxlcy5wcm9tb3Rpb259PlxuICAgICAgICAgICAge3J1bGVzLnByb21vdGlvbj8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkfSBzdHlsZT17cnVsZXMudGl0bGV9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkSWNvbn0+XG4gICAgICAgICAgICAgIDxHaWZ0SWNvbiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRUaXRsZX0+XG4gICAgICAgICAgICAgIHtydWxlcy50aXRsZT8uY2hpbGRyZW59XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaW5uZXJ9PlxuICAgICAgICAgICAgeyhydWxlcy5jaGlsZHJlbiB8fCBbXSkubWFwKGNoaWxkID0+IChcbiAgICAgICAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17Y2hpbGR9PlxuICAgICAgICAgICAgICAgIDxCb251c0NhcmQgLz5cbiAgICAgICAgICAgICAgPC9TdGF0ZUNvbnRleHQ+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPENvbXBsZXhHaWZ0IC8+KVxuXG4vLyBpbXBvcnQgeyBFbWl0dGVyVHlwZSB9IGZyb20gXCJzcmNcIjtcbi8vIGltcG9ydCB7IGlzRW1wdHlWYWx1ZSwgaXNWYWx1ZSB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuLy9cblxuLy9cbi8vIGV4cG9ydCBkZWZhdWx0IChlbWl0dGVyOiBFbWl0dGVyVHlwZSkgPT4ge1xuLy8gICBlbWl0dGVyLm9uKCdyZW5kZXJOb2RlJywgKHsgcnVsZSwgbGF5ZXIgfSkgPT4ge1xuLy8gICAgIGlmICgnJGFuaW1hdGlvbnMnIGluIHJ1bGUpIHtcbi8vICAgICAgIGNvbnN0IGFsbEFuaW1hdGlvbnMgPSBydWxlLiRhbmltYXRpb25zXG4vLyAgICAgICAgIC5tYXAoKGFuaW1hdGlvbjoga2V5b2YgdHlwZW9mIGFuaW1hdGlvbnNNYXApID0+IGFuaW1hdGlvbnNNYXBbYW5pbWF0aW9uXSlcbi8vICAgICAgICAgLmpvaW4oJywgJylcbi8vXG4vLyAgICAgICBjb25zdCBiYWNrZ3JvdW5kU3R5bGVzID1cbi8vICAgICAgICAgaXNWYWx1ZShydWxlLiRncmFkaWVudENvbG9yKSAmJiBydWxlLiRhbmltYXRpb25zLmluY2x1ZGVzKCdncmFkaWVudCcpXG4vLyAgICAgICAgICAgPyB7XG4vLyAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBgbGluZWFyLWdyYWRpZW50KC05MGRlZywgJHtydWxlLmJhY2tncm91bmRDb2xvcn0gMCUsICR7cnVsZS4kZ3JhZGllbnRDb2xvcn0gMTAwJSlgLFxuLy8gICAgICAgICAgICAgYmFja2dyb3VuZFNpemU6ICc0MDAlIDQwMCUnXG4vLyAgICAgICAgICAgfVxuLy8gICAgICAgICAgIDoge31cbi8vXG4vLyAgICAgICBlbWl0dGVyLmVtaXQoJ3J1blJlbmRlcicsIHtcbi8vICAgICAgICAgaWNvbjoge1xuLy8gICAgICAgICAgIGFuaW1hdGlvbjogYWxsQW5pbWF0aW9ucyxcbi8vICAgICAgICAgICAuLi5iYWNrZ3JvdW5kU3R5bGVzXG4vLyAgICAgICAgIH1cbi8vICAgICAgIH0pXG4vLyAgICAgfVxuLy9cbi8vICAgICBpZiAobGF5ZXIubGF5ZXIgPT09ICdpY29uJyAmJiAhaXNFbXB0eVZhbHVlKHJ1bGUuaGFzSWNvbikpIHtcbi8vICAgICAgIGVtaXR0ZXIuZW1pdCgncnVuUmVuZGVyJywge1xuLy8gICAgICAgICBpY29uVGFyZ2V0OiB7XG4vLyAgICAgICAgICAgZGlzcGxheTogcnVsZS5oYXNJY29uID8gJ2ZsZXgnIDogJ25vbmUnXG4vLyAgICAgICAgIH1cbi8vICAgICAgIH0pXG4vLyAgICAgfVxuLy9cbi8vICAgICBpZiAobGF5ZXIubGF5ZXIgPT09ICd0aXRsZScpIHtcbi8vICAgICAgIGVtaXR0ZXIuZW1pdCgncnVuUmVuZGVyJywge1xuLy8gICAgICAgICBoZWFkZXJJY29uOiB7XG4vLyAgICAgICAgICAgZGlzcGxheTogcnVsZS5oYXNJY29uID8gJ2Jsb2NrJyA6ICdub25lJ1xuLy8gICAgICAgICB9XG4vLyAgICAgICB9KVxuLy8gICAgIH1cbi8vXG4vLyAgICAgaWYgKGxheWVyLmxheWVyID09PSAnY29udGFpbmVyJykge1xuLy8gICAgICAgZW1pdHRlci5lbWl0KCdydW5SZW5kZXInLCB7XG4vLyAgICAgICAgIGJvZHk6IHtcbi8vICAgICAgICAgICAkZGVsYXk6IHJ1bGUuZGVsYXksXG4vLyAgICAgICAgICAgbGVmdDogcnVsZS5sZWZ0XG4vLyAgICAgICAgIH0sXG4vLyAgICAgICAgIGFycm93OiB7XG4vLyAgICAgICAgICAgbGVmdDogYCR7KyhydWxlLmxlZnQgfHwgMCkgKiAtMSArIDh9YCxcbi8vICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHJ1bGUuYmFja2dyb3VuZENvbG9yLFxuLy8gICAgICAgICAgIGJvcmRlclRvcFdpZHRoOiBydWxlLmJvcmRlcldpZHRoLFxuLy8gICAgICAgICAgIGJvcmRlclRvcENvbG9yOiBydWxlLmJvcmRlckNvbG9yLFxuLy8gICAgICAgICAgIGJvcmRlclRvcFN0eWxlOiAnc29saWQnLFxuLy8gICAgICAgICAgIGJvcmRlckxlZnRXaWR0aDogcnVsZS5ib3JkZXJXaWR0aCxcbi8vICAgICAgICAgICBib3JkZXJMZWZ0Q29sb3I6IHJ1bGUuYm9yZGVyQ29sb3IsXG4vLyAgICAgICAgICAgYm9yZGVyTGVmdFN0eWxlOiAnc29saWQnXG4vLyAgICAgICAgIH1cbi8vICAgICAgIH0pXG4vLyAgICAgfVxuLy8gICB9KVxuLy8gfVxuIiwiZXhwb3J0IGNvbnN0IHN3aXRjaFRleHRBbGlnblRvRmxleCA9ICh0ZXh0QWxpZ24/OiBzdHJpbmcpID0+XG4gIHRleHRBbGlnbiA/IHsgbGVmdDogJ2ZsZXgtc3RhcnQnLCBjZW50ZXI6ICdjZW50ZXInLCByaWdodDogJ2ZsZXgtZW5kJyB9W3RleHRBbGlnbl0gOiB0ZXh0QWxpZ25cbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuXG5jb25zdCBMaW5lOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJvb3R9IHN0eWxlPXtydWxlcy5yb290fT5cbiAgICAgIDxEaXNwbGF5VGV4dD57cnVsZXM/LnJvb3Q/LmNoaWxkcmVufTwvRGlzcGxheVRleHQ+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGluZVxuIiwiaW1wb3J0IHsgRkMsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgc2V0IH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG5pbXBvcnQgJ3NyYy9oZWxwZXJzL3Jlc2V0LnNjc3MnXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ29udGFpbmVyRGV2aWNlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZSdcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VHZXRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCB7IHN3aXRjaFRleHRBbGlnblRvRmxleCB9IGZyb20gXCJzcmMvaGVscGVycy9zd2l0Y2hUZXh0QWxpZ25Ub0ZsZXhcIjtcbmltcG9ydCBMaW5lIGZyb20gJy4vY29tcG9uZW50cy9saW5lJ1xuaW1wb3J0IHsgdXNlTWV0cmljcyB9IGZyb20gXCJzcmMvaG9va3MvdXNlTWV0cmljc1wiO1xuXG5jb25zdCBTaW1wbGVQb3B1cDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgdGFyZ2V0UmVmOiByb290UmVmIH0pXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VHZXRSdWxlcyhzdGF0ZSwgZGV2aWNlKVxuICBjb25zdCBvbkNsaWNrID0gdXNlTWV0cmljcyhkZXZpY2VTdGF0ZSlcblxuICBzZXQoZGV2aWNlU3RhdGUsICdidXR0b24ucGVyY2VudF93aWR0aCcsIGRldmljZVN0YXRlPy5idXR0b24/LndpZHRoKVxuICBzZXQoZGV2aWNlU3RhdGUsICdsZWdhbC5wZXJjZW50X3dpZHRoJywgZGV2aWNlU3RhdGU/LmxlZ2FsPy53aWR0aClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuXG5cbiAgY29uc3QgYm9keVJ1bGVzID0ge1xuICAgIGFsaWduSXRlbXM6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py5hbGlnbilcbiAgfVxuXG4gIGNvbnN0IGJ1dHRvblJ1bGVzID0ge1xuICAgIC4uLnJ1bGVzPy5idXR0b24sXG4gICAganVzdGlmeUNvbnRlbnQ6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py50ZXh0QWxpZ24pXG4gIH1cblxuICBjb25zdCBsZWdhbFJ1bGVzID0ge1xuICAgIC4uLnJ1bGVzPy5sZWdhbCxcbiAgICBqdXN0aWZ5Q29udGVudDogc3dpdGNoVGV4dEFsaWduVG9GbGV4KHJ1bGVzLnJvb3Q/LnRleHRBbGlnbilcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGFcbiAgICAgIHJlZj17cm9vdFJlZn1cbiAgICAgIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfVxuICAgICAgdGFyZ2V0PSdfYmxhbmsnXG4gICAgICByZWw9XCJub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBkZXZpY2UgPT09ICdkZXNrdG9wJyxcbiAgICAgICAgW3N0eWxlcy50YWJsZXRdOiBkZXZpY2UgPT09ICd0YWJsZXQnLFxuICAgICAgICBbc3R5bGVzLmxhcHRvcF06IGRldmljZSA9PT0gJ2xhcHRvcCdcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e3J1bGVzLnJvb3R9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9keX0gc3R5bGU9e2JvZHlSdWxlc30+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299Lz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZXh0fT5cbiAgICAgICAgICB7KHJ1bGVzPy5jaGlsZHJlbiB8fCBbXSkubWFwKGVsID0+IChcbiAgICAgICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e2VsfT5cbiAgICAgICAgICAgICAgPExpbmUgLz5cbiAgICAgICAgICAgIDwvU3RhdGVDb250ZXh0PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b259IHN0eWxlPXtidXR0b25SdWxlc30+XG4gICAgICAgICAge2J1dHRvblJ1bGVzPy5jaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVnYWx9IHN0eWxlPXtsZWdhbFJ1bGVzfT5cbiAgICAgICAgICB7bGVnYWxSdWxlcz8uY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9hPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8U2ltcGxlUG9wdXAgLz4pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgb21pdCwgcGljayB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgRGlzcGxheVRleHQgZnJvbSAnc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgeyBzcGFjaW5nT3B0aW9ucyB9IGZyb20gXCJzcmMvaGVscGVycy9jb25zdGFudHNcIjtcbmltcG9ydCB7IHVzZU1ldHJpY3MgfSBmcm9tIFwic3JjL2hvb2tzL3VzZU1ldHJpY3NcIjtcblxuY29uc3QgQm9udXM6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcbiAgY29uc3QgZGV2aWNlID0gc3RhdGU/LmRldmljZSB8fCAnZGVza3RvcCdcbiAgY29uc3Qgb25DbGljayA9IHVzZU1ldHJpY3Moc3RhdGUpXG5cblxuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgcmVsPVwibm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCdcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e29taXQocnVsZXMucm9vdCwgLi4uc3BhY2luZ09wdGlvbnMpfVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlcn0gc3R5bGU9e3J1bGVzLmhlYWRlcn0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGFpbmVyfSBzdHlsZT17cGljayhydWxlcy5yb290LCAuLi5zcGFjaW5nT3B0aW9ucyl9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30+PC9kaXY+XG4gICAgICAgICAgPERpc3BsYXlUZXh0IGNsYXNzTmFtZT17c3R5bGVzLnRleHR9IHN0eWxlPXtydWxlcy50ZXh0fT5cbiAgICAgICAgICAgIHtydWxlcy50ZXh0Py5jaGlsZHJlbn1cbiAgICAgICAgICA8L0Rpc3BsYXlUZXh0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e3J1bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgICB7cnVsZXMuYnV0dG9uPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsfSBzdHlsZT17cnVsZXMubGVnYWx9PlxuICAgICAgICAgICAge3J1bGVzLmxlZ2FsPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2E+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgQm9udXNcbiIsImltcG9ydCB7IEZDLCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCAnc3JjL2hlbHBlcnMvcmVzZXQuc2NzcydcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDb250YWluZXJEZXZpY2UgfSBmcm9tICdzcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZUdldFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZURldmljZVN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICdzcmMvU3RhdGVDb250ZXh0J1xuaW1wb3J0IEJvbnVzIGZyb20gJy4vY29tcG9uZW50cy9Cb251cydcbmltcG9ydCB7IHVzZUV4dHJhY3RGb250cyB9IGZyb20gJ3NyYy9ob29rcy91c2VFeHRyYWN0Rm9udHMnXG5cbmNvbnN0IFNpbXBsZVBvcHVwOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgcm9vdFJlZiA9IHVzZVJlZihudWxsKVxuICBjb25zdCBkZXZpY2UgPSB1c2VDb250YWluZXJEZXZpY2UoeyB0YXJnZXRSZWY6IHJvb3RSZWYgfSlcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBkZXZpY2VTdGF0ZSA9IHVzZUdldFJ1bGVzKHN0YXRlLCBkZXZpY2UpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcbiAgdXNlRXh0cmFjdEZvbnRzKGRldmljZVN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtyb290UmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtydWxlcy5yb290fVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGl0bGV9IHN0eWxlPXtydWxlcy50aXRsZX0+XG4gICAgICAgIHtydWxlcy50aXRsZT8uY2hpbGRyZW59XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMud3JhcHBlcn0+XG4gICAgICAgIHsocnVsZXMuY2hpbGRyZW4gfHwgW10pLm1hcChjaGlsZCA9PiAoXG4gICAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17eyAuLi5jaGlsZCwgZGV2aWNlIH19PlxuICAgICAgICAgICAgPEJvbnVzIC8+XG4gICAgICAgICAgPC9TdGF0ZUNvbnRleHQ+XG4gICAgICAgICkpfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxTaW1wbGVQb3B1cCAvPilcbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCBEaXNwbGF5VGV4dCBmcm9tICdzcmMvY29tcG9uZW50cy9EaXNwbGF5VGV4dCdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcblxuY29uc3QgTWF0Y2g6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcbiAgY29uc3QgZGV2aWNlID0gc3RhdGU/LmRldmljZSB8fCAnZGVza3RvcCdcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICBbc3R5bGVzLmRlc2t0b3BdOiBkZXZpY2UgPT09ICdkZXNrdG9wJ1xuICAgIH0pfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVmdH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbXN9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVhZ3VlfSBzdHlsZT17cnVsZXMubGVhZ3VlfT57cnVsZXMubGVhZ3VlPy5jaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm5hbWV9IHN0eWxlPXtydWxlcy50ZWFtc30+e3J1bGVzLnRlYW1zPy50ZWFtQX0g4oCUIHtydWxlcy50ZWFtcz8udGVhbUJ9PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJpZ2h0fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1Mb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbU5hbWV9IHN0eWxlPXtydWxlcy50ZWFtc30+e3J1bGVzLnRlYW1zPy50ZWFtQX08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGR9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkTGFiZWx9IHN0eWxlPXtydWxlcy5vZGRMYWJlbH0+e3J1bGVzLm9kZExhYmVsPy5jaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZFZhbHVlfSBzdHlsZT17cnVsZXMub2RkVmFsdWV9PntydWxlcy5vZGRWYWx1ZT8uY2hpbGRyZW59PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTG9nb30vPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbU5hbWV9IHN0eWxlPXtydWxlcy50ZWFtc30+e3J1bGVzLnRlYW1zPy50ZWFtQn08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYXRjaFxuIiwiaW1wb3J0IHsgRkMsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgc2V0IH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgJ3NyYy9oZWxwZXJzL3Jlc2V0LnNjc3MnXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ29udGFpbmVyRGV2aWNlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZSdcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VHZXRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCBEaXNwbGF5VGV4dCBmcm9tICdzcmMvY29tcG9uZW50cy9EaXNwbGF5VGV4dCdcbmltcG9ydCB7IHN3aXRjaFRleHRBbGlnblRvRmxleCB9IGZyb20gJ3NyYy9oZWxwZXJzL3N3aXRjaFRleHRBbGlnblRvRmxleCdcbmltcG9ydCBNYXRjaCBmcm9tICcuL2NvbXBvbmVudHMvTWF0Y2gnXG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZU1ldHJpY3MnXG5cbmNvbnN0IFNpbXBsZVBvcHVwOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgcm9vdFJlZiA9IHVzZVJlZihudWxsKVxuICBjb25zdCBkZXZpY2UgPSB1c2VDb250YWluZXJEZXZpY2UoeyB0YXJnZXRSZWY6IHJvb3RSZWYgfSlcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBkZXZpY2VTdGF0ZSA9IHVzZUdldFJ1bGVzKHN0YXRlLCBkZXZpY2UpXG4gIHNldChkZXZpY2VTdGF0ZSwgJ2J1dHRvbldyYXBwZXIucGVyY2VudF93aWR0aCcsIGRldmljZVN0YXRlPy5idXR0b25XcmFwcGVyPy53aWR0aClcbiAgc2V0KGRldmljZVN0YXRlLCAnbGVnYWwucGVyY2VudF93aWR0aCcsIGRldmljZVN0YXRlPy5sZWdhbD8ud2lkdGgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcbiAgY29uc3Qgb25DbGljayA9IHVzZU1ldHJpY3MoZGV2aWNlU3RhdGUpXG5cbiAgY29uc3QgYm9keVJ1bGVzID0ge1xuICAgIC4uLnJ1bGVzLnJvb3QsXG4gICAgYWxpZ25JdGVtczogc3dpdGNoVGV4dEFsaWduVG9GbGV4KHJ1bGVzLnJvb3Q/LmFsaWduKVxuICB9XG5cbiAgY29uc3QgY29udGVudFJ1bGVzID0ge1xuICAgIC4uLnJ1bGVzLmNvbnRlbnQsXG4gICAgYWxpZ25JdGVtczogc3dpdGNoVGV4dEFsaWduVG9GbGV4KHJ1bGVzLnJvb3Q/LmFsaWduKVxuICB9XG5cbiAgY29uc3QgdGV4dFJ1bGVzID0ge1xuICAgIC4uLnJ1bGVzLnRleHQsXG4gICAgdGV4dEFsaWduOiBydWxlcy5yb290Py5hbGlnblxuICB9XG5cbiAgY29uc3QgYnV0dG9uUnVsZXMgPSB7XG4gICAgLi4ucnVsZXM/LmJ1dHRvbixcbiAgICBqdXN0aWZ5Q29udGVudDogc3dpdGNoVGV4dEFsaWduVG9GbGV4KHJ1bGVzLnJvb3Q/LnRleHRBbGlnbilcbiAgfVxuXG4gIGNvbnN0IGxlZ2FsUnVsZXMgPSB7XG4gICAgLi4ucnVsZXM/LmxlZ2FsLFxuICAgIGp1c3RpZnlDb250ZW50OiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8udGV4dEFsaWduKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgcmVmPXtyb290UmVmfVxuICAgICAgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9XG4gICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgIHJlbD0nbm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlcidcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBkZXZpY2UgPT09ICdkZXNrdG9wJyxcbiAgICAgICAgW3N0eWxlcy5sYXB0b3BdOiBkZXZpY2UgPT09ICdsYXB0b3AnLFxuICAgICAgICBbc3R5bGVzLnRhYmxldF06IGRldmljZSA9PT0gJ3RhYmxldCdcbiAgICAgIH0pfVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9IHN0eWxlPXtib2R5UnVsZXN9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWR9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGl0bGV9IHN0eWxlPXtydWxlcy50aXRsZX0+XG4gICAgICAgICAgICB7cnVsZXMudGl0bGU/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLndyYXBwZXJ9IHN0eWxlPXtjb250ZW50UnVsZXN9PlxuICAgICAgICAgIHsocnVsZXMuY2hpbGRyZW4gfHwgW10pLm1hcChjaGlsZCA9PiAoXG4gICAgICAgICAgICA8U3RhdGVDb250ZXh0IHZhbHVlPXt7IC4uLmNoaWxkLCBkZXZpY2UgfX0+XG4gICAgICAgICAgICAgIDxNYXRjaCAvPlxuICAgICAgICAgICAgPC9TdGF0ZUNvbnRleHQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxEaXNwbGF5VGV4dCBjbGFzc05hbWU9e3N0eWxlcy50ZXh0fSBzdHlsZT17dGV4dFJ1bGVzfT5cbiAgICAgICAgICB7cnVsZXMudGV4dD8uY2hpbGRyZW59XG4gICAgICAgIDwvRGlzcGxheVRleHQ+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9ufSBzdHlsZT17cnVsZXMuYnV0dG9uV3JhcHBlcn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b25IZWFkfSBzdHlsZT17cnVsZXMuYnV0dG9uSGVhZH0+XG4gICAgICAgICAgICB7cnVsZXMuYnV0dG9uSGVhZD8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b25UYXJnZXR9IHN0eWxlPXtidXR0b25SdWxlc30+XG4gICAgICAgICAgICB7cnVsZXMuYnV0dG9uPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVnYWx9IHN0eWxlPXtsZWdhbFJ1bGVzfT5cbiAgICAgICAgICB7cnVsZXMubGVnYWw/LmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYT5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPFNpbXBsZVBvcHVwIC8+KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgdXNlVG9nZ2xlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVRvZ2dsZSdcbmltcG9ydCB7IHVzZU1ldHJpY3MgfSBmcm9tICdzcmMvaG9va3MvdXNlTWV0cmljcydcblxuY29uc3QgQm9udXM6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcbiAgY29uc3QgW2lzT3BlbiwgdG9nZ2xlSXNPcGVuXSA9IHVzZVRvZ2dsZSgpXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VNZXRyaWNzKHN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yb290fSBzdHlsZT17cnVsZXMucm9vdH0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJhY2tncm91bmR9IHN0eWxlPXtydWxlcy5iYWNrZ3JvdW5kfSAvPlxuICAgICAgPGFcbiAgICAgICAgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9XG4gICAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgICByZWw9J25vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXInXG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9XG4gICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICA+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yb3dGaXJzdH0gc3R5bGU9e3J1bGVzLnJvd0ZpcnN0fT5cbiAgICAgICAgICAgIHtydWxlcy5yb3dGaXJzdD8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yb3dTZWNvbmR9IHN0eWxlPXtydWxlcy5yb3dTZWNvbmR9PlxuICAgICAgICAgICAge3J1bGVzLnJvd1NlY29uZD8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib29rbWFrZXJ9PndpbmxpbmU8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9ufSBzdHlsZT17cnVsZXMuYnV0dG9ufT5cbiAgICAgICAgICB7cnVsZXMuYnV0dG9uPy5jaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2E+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMubGVnYWwsIHtcbiAgICAgICAgICBbc3R5bGVzLmxlZ2FsT3Blbl06IGlzT3BlblxuICAgICAgICB9KX1cbiAgICAgICAgc3R5bGU9e3J1bGVzLmxlZ2FsSW5mb31cbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMubGVnYWxUZXh0fT5cbiAgICAgICAgICA8c3Bhbj57cnVsZXMubGVnYWxJbmZvPy5jaGlsZHJlbn08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMubGVnYWxCdXR0b259IHN0eWxlPXtydWxlcy5sZWdhbEluZm9CdXR0b259IG9uQ2xpY2s9e3RvZ2dsZUlzT3Blbn0+XG4gICAgICAgICAgICB7aXNPcGVuID8gcnVsZXMubGVnYWxJbmZvQnV0dG9uPy5vcGVuVGV4dCA6IHJ1bGVzLmxlZ2FsSW5mb0J1dHRvbj8uY2xvc2VUZXh0fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgQm9udXNcbiIsImltcG9ydCB7IEZDLCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZUdldFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZURldmljZVN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICdzcmMvU3RhdGVDb250ZXh0J1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IEJvbnVzIGZyb20gJy4vY29tcG9uZW50cy9Cb251cydcblxuY29uc3QgQm9udXNDYXJkOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgcm9vdFJlZiA9IHVzZVJlZihudWxsKVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IGRldmljZSA9ICdkZXNrdG9wJ1xuICBjb25zdCBkZXZpY2VTdGF0ZSA9IHVzZUdldFJ1bGVzKHN0YXRlLCBkZXZpY2UpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgcmVmPXtyb290UmVmfT5cbiAgICAgIHsocnVsZXM/LmNoaWxkcmVuIHx8IFtdKS5tYXAoY2hpbGQgPT4gKFxuICAgICAgICA8U3RhdGVDb250ZXh0IHZhbHVlPXtjaGlsZH0+XG4gICAgICAgICAgPEJvbnVzIC8+XG4gICAgICAgIDwvU3RhdGVDb250ZXh0PlxuICAgICAgKSl9XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxCb251c0NhcmQgLz4pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgb21pdCB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgeyBiYWNrZ3JvdW5kT3B0aW9ucyB9IGZyb20gXCJzcmMvaGVscGVycy9jb25zdGFudHNcIjtcblxuY29uc3QgVGV4dDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IHN0YXRlPy5kZXZpY2UgPT09ICdkZXNrdG9wJ1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17b21pdChydWxlcy5yb290LCAuLi5iYWNrZ3JvdW5kT3B0aW9ucyl9XG4gICAgPlxuICAgICAge3J1bGVzLnJvb3Q/LmNoaWxkcmVufVxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IFRleHRcbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyBvbWl0IH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCB7IGJhY2tncm91bmRPcHRpb25zIH0gZnJvbSBcInNyYy9oZWxwZXJzL2NvbnN0YW50c1wiO1xuXG5jb25zdCBNYXRjaGVzOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG5cbiAgY29uc3Qgcm9vdFJ1bGVzID0gb21pdChydWxlcy5yb290LCAuLi5iYWNrZ3JvdW5kT3B0aW9ucylcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm9vdH0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkTG9nb30gc3R5bGU9e3Jvb3RSdWxlc30gLz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGRMYWJlbH0gc3R5bGU9e3Jvb3RSdWxlc30+e3J1bGVzLnJvb3Q/LnZhbHVlT25lfTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvZWZ9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvZWZIZWFkfSBzdHlsZT17cnVsZXMuY29lZn0+WDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvZWZWYWx1ZX0gc3R5bGU9e3Jvb3RSdWxlc30+e3J1bGVzLnJvb3Q/LnZhbHVlWH08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLm9kZCwgc3R5bGVzLm9kZFJldmVyc2UpfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGRMb2dvfSBzdHlsZT17cm9vdFJ1bGVzfS8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkTGFiZWx9IHN0eWxlPXtyb290UnVsZXN9PntydWxlcy5yb290Py52YWx1ZVR3b308L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1hdGNoZXNcbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyBvbWl0IH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCB7IGJhY2tncm91bmRPcHRpb25zIH0gZnJvbSBcInNyYy9oZWxwZXJzL2NvbnN0YW50c1wiO1xuXG5jb25zdCBNYXRjaGVzT25lVHdvOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogc3RhdGU/LmRldmljZSA9PT0gJ2Rlc2t0b3AnLFxuICAgICAgICBbc3R5bGVzLmxhcHRvcF06IHN0YXRlPy5kZXZpY2UgPT09ICdsYXB0b3AnLFxuICAgICAgICBbc3R5bGVzLnRhYmxldF06IHN0YXRlPy5kZXZpY2UgPT09ICd0YWJsZXQnXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtvbWl0KHJ1bGVzLnJvb3QsIC4uLmJhY2tncm91bmRPcHRpb25zKX1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRpdGxlfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50aXRsZUxhYmVsfSBzdHlsZT17cnVsZXMudGl0bGVMYWJlbH0+XG4gICAgICAgICAge3J1bGVzLnRpdGxlTGFiZWwuY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRpdGxlVmFsdWV9IHN0eWxlPXtydWxlcy50aXRsZVZhbHVlfT5cbiAgICAgICAgICB7cnVsZXMudGl0bGVWYWx1ZS5jaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTmFtZX0gc3R5bGU9e3J1bGVzLnRlYW1OYW1lfT5cbiAgICAgICAgICAgIHtydWxlcy50ZWFtMU5hbWUuY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtVmFsdWV9IHN0eWxlPXtydWxlcy52YWx1ZX0+XG4gICAgICAgICAgICB7cnVsZXMudmFsdWUxLmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1Mb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1OYW1lfSBzdHlsZT17cnVsZXMudGVhbU5hbWV9PlxuICAgICAgICAgICAge3J1bGVzLnRlYW0yTmFtZS5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1WYWx1ZX0gc3R5bGU9e3J1bGVzLnZhbHVlfT5cbiAgICAgICAgICAgIHtydWxlcy52YWx1ZTIuY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWF0Y2hlc09uZVR3b1xuIiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5cbmludGVyZmFjZSBTbGlkZSB7XG4gIGFuaW1hdGlvbkR1cmF0aW9uOiBudW1iZXJcbn1cblxuY29uc3QgdXNlQW5pbWF0ZWRMaXN0ID0gKHNsaWRlczogU2xpZGVbXSA9IFtdKSA9PiB7XG4gIGNvbnN0IGl0ZW1zQ291bnQgPSBzbGlkZXMubGVuZ3RoXG4gIGNvbnN0IFthbmltYXRlZElkeCwgc2V0QW5pbWF0ZWRJZHhdID0gdXNlU3RhdGU8bnVtYmVyPigwKVxuICBjb25zdCBhbmltYXRpb25EdXJhdGlvbiA9IHNsaWRlc1thbmltYXRlZElkeCB8fCAwXT8uYW5pbWF0aW9uRHVyYXRpb25cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGdvTmV4dCA9ICgpID0+IHtcbiAgICAgIHNldEFuaW1hdGVkSWR4KGluZGV4ID0+IHtcbiAgICAgICAgaWYgKGluZGV4ICsgMSA8IGl0ZW1zQ291bnQpIHJldHVybiBpbmRleCArIDFcbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoZ29OZXh0LCBhbmltYXRpb25EdXJhdGlvbilcblxuICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodGltZW91dClcbiAgfSwgW3NldEFuaW1hdGVkSWR4LCBpdGVtc0NvdW50LCBhbmltYXRpb25EdXJhdGlvbiwgYW5pbWF0ZWRJZHhdKVxuXG4gIHJldHVybiBhbmltYXRlZElkeFxufVxuXG5leHBvcnQgZGVmYXVsdCB1c2VBbmltYXRlZExpc3RcbiIsImltcG9ydCB7IEZDLCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IHBpY2sgfSBmcm9tICdAYWRzdG9yZS91dGlscydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VHZXRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgVGV4dCBmcm9tICcuL2NvbXBvbmVudHMvVGV4dCdcbmltcG9ydCBNYXRjaGVzIGZyb20gJy4vY29tcG9uZW50cy9NYXRjaGVzJ1xuaW1wb3J0IE1hdGNoZXNPbmVUd28gZnJvbSAnLi9jb21wb25lbnRzL01hdGNoZXNPbmVUd28nXG5pbXBvcnQgeyB1c2VDb250YWluZXJEZXZpY2UgfSBmcm9tICdzcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlJ1xuaW1wb3J0IHVzZUFuaW1hdGVkTGlzdCBmcm9tICdzcmMvaG9va3MvdXNlQW5pbWF0ZWRMaXN0J1xuaW1wb3J0IHsgdXNlTWV0cmljcyB9IGZyb20gJ3NyYy9ob29rcy91c2VNZXRyaWNzJ1xuaW1wb3J0IHsgYmFja2dyb3VuZE9wdGlvbnMgfSBmcm9tICdzcmMvaGVscGVycy9jb25zdGFudHMnXG5cbmNvbnN0IERFRkFVTFRfQU5JTUFUSU9OX1NQRUVEID0gMzcwMFxuXG5jb25zdCBXaWRlQ2FyZDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBkZXZpY2UgPSB1c2VDb250YWluZXJEZXZpY2UoeyB0YXJnZXRSZWY6IHJvb3RSZWYgfSlcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VHZXRSdWxlcyhzdGF0ZSwgZGV2aWNlKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VNZXRyaWNzKGRldmljZVN0YXRlKVxuXG4gIGNvbnN0IGdldENoaWxkID0gKG5hbWU6IHN0cmluZykgPT5cbiAgICAoe1xuICAgICAgdGV4dDogPFRleHQgLz4sXG4gICAgICBtYXRjaGVzOiA8TWF0Y2hlcyAvPixcbiAgICAgIG1hdGNoZXNPbmVUd286IDxNYXRjaGVzT25lVHdvIC8+XG4gICAgfVtuYW1lXSlcblxuICBjb25zdCBzbGlkZXNMaXN0ID0gKHJ1bGVzLmNoaWxkcmVuIHx8IFtdKS5maWx0ZXIoQm9vbGVhbikubWFwKHNsaWRlID0+ICh7XG4gICAgLi4uc2xpZGUsXG4gICAgYW5pbWF0aW9uTmFtZTogc2xpZGU/LnJvb3Q/LmFuaW1hdGlvbk5hbWUsXG4gICAgYW5pbWF0aW9uRHVyYXRpb246IHNsaWRlPy5yb290Py5hbmltYXRpb25EdXJhdGlvbiB8fCBERUZBVUxUX0FOSU1BVElPTl9TUEVFRFxuICB9KSlcblxuICBjb25zdCBjdXJyZW50U2xpZGUgPSB1c2VBbmltYXRlZExpc3Qoc2xpZGVzTGlzdClcbiAgY29uc3Qgc2xpZGVSdWxlcyA9IHVzZVBhcnNlUnVsZXMoc2xpZGVzTGlzdFtjdXJyZW50U2xpZGVdIHx8IHt9KVxuXG4gIGNvbnN0IGJhY2tncm91bmRSdWxlcyA9IHNsaWRlUnVsZXM/LnJvb3Q/Lmhhc0N1c3RvbUJhY2tncm91bmRcbiAgICA/IHBpY2soc2xpZGVSdWxlcz8ucm9vdCB8fCB7fSwgLi4uYmFja2dyb3VuZE9wdGlvbnMpXG4gICAgOiBwaWNrKHJ1bGVzLmJhY2tncm91bmQsIC4uLmJhY2tncm91bmRPcHRpb25zKVxuXG4gIHJldHVybiAoXG4gICAgPGFcbiAgICAgIHJlZj17cm9vdFJlZn1cbiAgICAgIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfVxuICAgICAgdGFyZ2V0PSdfYmxhbmsnXG4gICAgICByZWw9J25vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXInXG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCcsXG4gICAgICAgIFtzdHlsZXMubGFwdG9wXTogZGV2aWNlID09PSAnbGFwdG9wJyxcbiAgICAgICAgW3N0eWxlcy50YWJsZXRdOiBkZXZpY2UgPT09ICd0YWJsZXQnLFxuICAgICAgICBbc3R5bGVzLnZhcmlhbnQyXTogcnVsZXMucm9vdD8udmFyaWFudCA9PT0gJ3ZhcmlhbnQyJ1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17cnVsZXMucm9vdH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5iYWNrZ3JvdW5kfSBzdHlsZT17YmFja2dyb3VuZFJ1bGVzfSAvPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5wcm9tb3Rpb259IHN0eWxlPXtydWxlcy5wcm9tb3Rpb259PlxuICAgICAgICB7cnVsZXMucHJvbW90aW9uPy5jaGlsZHJlbn1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZnR9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNlbnRlcn0+XG4gICAgICAgICAgeyhydWxlcy5jaGlsZHJlbiB8fCBbXSkubWFwKChjaGlsZCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuc2xpZGV9XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uTmFtZTogY3VycmVudFNsaWRlID09PSBpbmRleCA/IHN0eWxlc1tjaGlsZC5yb290Py5hbmltYXRpb25OYW1lIHx8ICdmYWRlLWluLW91dCddIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgIGFuaW1hdGlvbkR1cmF0aW9uOiBgJHtjaGlsZC5yb290Py5hbmltYXRpb25EdXJhdGlvbn1tc2BcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17eyAuLi5jaGlsZCwgZGV2aWNlIH19PntnZXRDaGlsZChjaGlsZC5uYW1lKX08L1N0YXRlQ29udGV4dD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yaWdodH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9uV3JhcHBlcn0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e3J1bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgICAgICAgIHtydWxlcy5idXR0b24/LmNoaWxkcmVufVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9hPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8V2lkZUNhcmQgLz4pXG4iLCJpbXBvcnQgeyBDYWxsYmFjaywgZGV2aWNlcyBhcyBkZXZpY2VzTGlzdCwgZ2V0LCBzZXQgfSBmcm9tICdAYWRzdG9yZS91dGlscydcbmltcG9ydCB7IEFueVN0YXRlIH0gZnJvbSAnc3JjL3Byb21vcy9TaW1wbGVHaWZ0L3R5cGVzJ1xuXG5jb25zdCBtb2RpZnlTdGF0ZSA9IChcbiAgc3RhdGU6IEFueVN0YXRlLFxuICBsYXllcjogc3RyaW5nLFxuICBydWxlOiBzdHJpbmcsXG4gIHZhbHVlOiB1bmtub3duIHwgQ2FsbGJhY2s8W3ByZXZWYWx1ZTogdW5rbm93bl0+LFxuICBkZXZpY2VzID0gZGV2aWNlc0xpc3RcbikgPT4ge1xuICBjb25zdCBuZXdTdGF0ZSA9IHsgLi4uc3RhdGUgfVxuXG4gIGRldmljZXMuZm9yRWFjaChkZXZpY2UgPT4ge1xuICAgIG5ld1N0YXRlW2xheWVyXSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlW2xheWVyXSxcbiAgICAgIFtkZXZpY2VdOiB7XG4gICAgICAgIC4uLm5ld1N0YXRlW2xheWVyXVtkZXZpY2VdLFxuICAgICAgICBbcnVsZV06IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlKGdldChuZXdTdGF0ZSwgYCR7bGF5ZXJ9LiR7ZGV2aWNlfS4ke3J1bGV9YCkpIDogdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH0pXG4gIHJldHVybiBuZXdTdGF0ZVxufVxuXG5leHBvcnQgeyBtb2RpZnlTdGF0ZSB9XG4iXSwibmFtZXMiOlsiY2xhc3NOYW1lcyIsImkiLCJpbm5lciIsIm1vZHVsZSIsIm8iLCJuIiwidCIsInUiLCJCIiwiciIsImYiLCJjIiwiZSIsIl8iLCJGIiwicSIsInciLCJnIiwibCIsInVzZUdpZnRPcGVuIiwiZGVsYXkiLCJpc09wZW4iLCJzZXRJc09wZW4iLCJ1c2VTdGF0ZSIsInRpbWVyUmVmIiwidXNlUmVmIiwib25Ub2dnbGUiLCJjbGVhclRpbWVvdXQiLCJjdXJyZW50IiwicHJldiIsInVzZUVmZmVjdCIsInNldFRpbWVvdXQiLCJzIiwiYSIsIlN0YXRlIiwiY3JlYXRlQ29udGV4dCIsIlN0YXRlQ29udGV4dCIsImNoaWxkcmVuIiwidmFsdWUiLCJfanN4IiwiUHJvdmlkZXIiLCJyZW5kZXIiLCJ2Tm9kZSIsInRhcmdldCIsInN0YXRlIiwicHJlYWN0UmVuZGVyIiwidXNlQ3VycmVudFN0YXRlIiwidXNlQ29udGV4dCIsImxpc3RDYWNoZUNsZWFyIiwiZXEiLCJyZXF1aXJlJCQwIiwiYXNzb2NJbmRleE9mIiwibGlzdENhY2hlRGVsZXRlIiwiZGF0YSIsImluZGV4IiwibGlzdENhY2hlR2V0IiwibGlzdENhY2hlSGFzIiwibGlzdENhY2hlU2V0IiwicmVxdWlyZSQkMSIsInJlcXVpcmUkJDIiLCJyZXF1aXJlJCQzIiwicmVxdWlyZSQkNCIsIkxpc3RDYWNoZSIsInN0YWNrQ2xlYXIiLCJzdGFja0RlbGV0ZSIsInN0YWNrR2V0Iiwic3RhY2tIYXMiLCJmcmVlR2xvYmFsIiwiZ2xvYmFsIiwicm9vdCIsIlN5bWJvbCIsIm9iamVjdFByb3RvIiwiaGFzT3duUHJvcGVydHkiLCJuYXRpdmVPYmplY3RUb1N0cmluZyIsInN5bVRvU3RyaW5nVGFnIiwiZ2V0UmF3VGFnIiwib2JqZWN0VG9TdHJpbmciLCJiYXNlR2V0VGFnIiwiaXNPYmplY3QiLCJmdW5jVGFnIiwiaXNGdW5jdGlvbiIsImNvcmVKc0RhdGEiLCJpc01hc2tlZCIsImZ1bmNQcm90byIsImZ1bmNUb1N0cmluZyIsInRvU291cmNlIiwiYmFzZUlzTmF0aXZlIiwiZ2V0VmFsdWUiLCJnZXROYXRpdmUiLCJNYXAiLCJuYXRpdmVDcmVhdGUiLCJoYXNoQ2xlYXIiLCJoYXNoRGVsZXRlIiwiSEFTSF9VTkRFRklORUQiLCJoYXNoR2V0IiwiaGFzaEhhcyIsImhhc2hTZXQiLCJIYXNoIiwibWFwQ2FjaGVDbGVhciIsImlzS2V5YWJsZSIsImdldE1hcERhdGEiLCJtYXBDYWNoZURlbGV0ZSIsIm1hcENhY2hlR2V0IiwibWFwQ2FjaGVIYXMiLCJtYXBDYWNoZVNldCIsIk1hcENhY2hlIiwic3RhY2tTZXQiLCJyZXF1aXJlJCQ1IiwiU3RhY2siLCJkZWZpbmVQcm9wZXJ0eSIsImJhc2VBc3NpZ25WYWx1ZSIsImFzc2lnbk1lcmdlVmFsdWUiLCJjcmVhdGVCYXNlRm9yIiwiYmFzZUZvciIsImV4cG9ydHMiLCJjbG9uZUJ1ZmZlciIsIlVpbnQ4QXJyYXkiLCJjbG9uZUFycmF5QnVmZmVyIiwiY2xvbmVUeXBlZEFycmF5IiwiY29weUFycmF5IiwiYmFzZUNyZWF0ZSIsIm92ZXJBcmciLCJnZXRQcm90b3R5cGUiLCJpc1Byb3RvdHlwZSIsImluaXRDbG9uZU9iamVjdCIsImlzT2JqZWN0TGlrZSIsImFyZ3NUYWciLCJiYXNlSXNBcmd1bWVudHMiLCJpc0FyZ3VtZW50cyIsImlzQXJyYXkiLCJNQVhfU0FGRV9JTlRFR0VSIiwiaXNMZW5ndGgiLCJpc0FycmF5TGlrZSIsImlzQXJyYXlMaWtlT2JqZWN0Iiwic3R1YkZhbHNlIiwiaXNCdWZmZXIiLCJvYmplY3RUYWciLCJpc1BsYWluT2JqZWN0IiwiYmFzZUlzVHlwZWRBcnJheSIsImJhc2VVbmFyeSIsIm5vZGVVdGlsIiwiaXNUeXBlZEFycmF5Iiwic2FmZUdldCIsImFzc2lnblZhbHVlIiwiY29weU9iamVjdCIsImJhc2VUaW1lcyIsImlzSW5kZXgiLCJhcnJheUxpa2VLZXlzIiwibmF0aXZlS2V5c0luIiwiYmFzZUtleXNJbiIsImtleXNJbiIsInRvUGxhaW5PYmplY3QiLCJyZXF1aXJlJCQ2IiwicmVxdWlyZSQkNyIsInJlcXVpcmUkJDgiLCJyZXF1aXJlJCQ5IiwicmVxdWlyZSQkMTAiLCJyZXF1aXJlJCQxMSIsInJlcXVpcmUkJDEyIiwicmVxdWlyZSQkMTMiLCJyZXF1aXJlJCQxNCIsImJhc2VNZXJnZURlZXAiLCJiYXNlTWVyZ2UiLCJpZGVudGl0eSIsImFwcGx5Iiwib3ZlclJlc3QiLCJjb25zdGFudCIsImJhc2VTZXRUb1N0cmluZyIsInNob3J0T3V0Iiwic2V0VG9TdHJpbmciLCJiYXNlUmVzdCIsImlzSXRlcmF0ZWVDYWxsIiwiY3JlYXRlQXNzaWduZXIiLCJpbmplY3RMaW5rIiwib3B0aW9ucyIsImhlYWQiLCJkb2N1bWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwibGluayIsImNyZWF0ZUVsZW1lbnQiLCJPYmplY3QiLCJlbnRyaWVzIiwiZm9yRWFjaCIsImtleSIsInNldEF0dHJpYnV0ZSIsImFwcGVuZENoaWxkIiwiaXRlcmF0b3IiLCJpbnB1dCIsInZpc2l0b3IiLCJBcnJheSIsIm1hcCIsImVsIiwicmVkdWNlIiwiYWNjIiwiaXNFbXB0eVZhbHVlIiwidW5kZWZpbmVkIiwiaXNWYWx1ZSIsInBpY2siLCJvYmoiLCJwcm9wcyIsInJlc3VsdCIsInByb3AiLCJvbWl0IiwiZ2V0IiwicGF0aCIsImRlZlZhbHVlIiwicGF0aEFycmF5IiwibWF0Y2giLCJwcmV2T2JqIiwic2V0IiwibGVuZ3RoIiwiaGV4VG9SZ2IiLCJoZXgiLCJjaGFycyIsInNsaWNlIiwic3BsaXQiLCJ2YWwiLCJqb2luIiwiZXhlYyIsInBhcnNlSW50IiwiYiIsImlzSnNvblNhbWUiLCJ2YWx1ZXMiLCJKU09OIiwic3RyaW5naWZ5IiwiZXZlcnkiLCJhcnIiLCJyZ2JUb1JnYmEiLCJyZ2IiLCJhbHBoYSIsInJlcGxhY2UiLCJkZXZpY2VzIiwiQlJFQUtQT0lOVFMiLCJtb2JpbGUiLCJ0YWJsZXQiLCJsYXB0b3AiLCJkZXNrdG9wIiwiaXNWYWxpZExheWVyIiwiZGV2aWNlIiwiZ2V0UnVsZXMiLCJfa2V5IiwicmVzdWx0UnVsZXMiLCJwYXJlbnQiLCJ1c2VHZXRSdWxlcyIsInVzZUNvbnRhaW5lckRldmljZSIsInRhcmdldFJlZiIsInBhcmVudEtleSIsImJyZWFrcG9pbnRzIiwic2V0RGV2aWNlIiwiY2hlY2tEZXZpY2UiLCJwYXJlbnRXaWR0aCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIndpZHRoIiwic29ydGVkQnJlYWtwb2ludHMiLCJzb3J0IiwiXzEiLCJ2YWx1ZUEiLCJfMiIsInZhbHVlQiIsImZpbmREZXZpY2UiLCJmaW5kIiwibmV4dFZhbHVlIiwidXNlTGF5b3V0RWZmZWN0IiwicGFyZW50RWxlbWVudCIsImNsb3Nlc3QiLCJyZXNpemVPYnNlcnZlciIsIlJlc2l6ZU9ic2VydmVyIiwib2JzZXJ2ZSIsIndyYXBUbyIsInVudGlsIiwidG9QeCIsInN0YXJ0c1dpdGgiLCJ0b1BlcmNlbnQiLCJmb3JtYXRSdWxlIiwibmV3S2V5IiwibmV3VmFsdWUiLCJERUZBVUxUX1RPX1BYIiwicGFyc2VSdWxlcyIsInJ1bGVzIiwibGF5ZXIiLCJrZXlzIiwiaW5jbHVkZXMiLCJ3YXJuIiwidHlwb2dyYXBoeSIsImFjY2VudFR5cG9ncmFwaHkiLCJmb250RmFtaWx5IiwiY29sb3IiLCJmb250U2l6ZSIsInByb3BLZXkiLCJwcm9wVmFsdWUiLCJpbm5lckhUTUwiLCJpbm5lclRleHQiLCJkaXNwbGF5IiwiYm9yZGVyU3R5bGUiLCJib3JkZXJSYWRpdXMiLCJiYWNrZ3JvdW5kU2l6ZSIsImJhY2tncm91bmRJbWFnZSIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kQ29sb3JPcGFjaXR5IiwiYmFja2dyb3VuZENvbG9yIiwiZm9udFdlaWdodCIsImZvbnRTdHlsZSIsInRleHREZWNvcmF0aW9uIiwiaXNWYWxpZFJ1bGUiLCJydWxlIiwidXNlUGFyc2VSdWxlcyIsIkRpc3BsYXlUZXh0IiwicmVzdCIsImZvcm1hdFZhbHVlIiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJfX2h0bWwiLCJ1c2VUb2dnbGUiLCJDbG9zZUljb24iLCJ4bWxucyIsImhlaWdodCIsInZpZXdCb3giLCJkIiwiZmlsbCIsIkdpZnRJY29uIiwiZmlsbFJ1bGUiLCJhbmltYXRpb25zTWFwIiwiYW5pbWF0aW9ucyIsImZhZGUiLCJwdWxzZSIsIndpZ2dsZSIsImdyYWRpZW50IiwidXNlR2lmdFJ1bGVzIiwiZGV2aWNlU3RhdGUiLCJmdWxsQW5pbWF0aW9ucyIsImhhc0ljb24iLCJpY29uIiwiYXJyb3dSdWxlcyIsImxlZnQiLCJjb250YWluZXIiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlcldpZHRoIiwiYm9yZGVyVG9wQ29sb3IiLCJib3JkZXJDb2xvciIsImJvcmRlclRvcFN0eWxlIiwiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyTGVmdENvbG9yIiwiYm9yZGVyTGVmdFN0eWxlIiwiYm9keVJ1bGVzIiwiYWxsQW5pbWF0aW9ucyIsImFuaW1hdGlvbiIsImJhY2tncm91bmRTdHlsZXMiLCJncmFkaWVudENvbG9yIiwiYmFja2dyb3VuZCIsImljb25SdWxlcyIsImJhY2tncm91bmRPcHRpb25zIiwic3BhY2luZ09wdGlvbnMiLCJub29wWWFNZXRyaWthIiwiZ29hbCIsImNvbnNvbGUiLCJsb2ciLCJub29wQWRGb3giLCJ1c2VNZXRyaWNzIiwibGF5ZXJOYW1lIiwic2F2ZU1ldHJpY3MiLCJ5YVJlYWNoR29hbCIsImFkZm94UmVhY2hHb2FsIiwibWV0cmljcyIsInlhU2hvdyIsImFkZm94U2hvdyIsInlhQ2xpY2siLCJhZGZveENsaWNrIiwidXNlRXh0cmFjdEZvbnRzIiwiZm9udHMiLCJTZXQiLCJhZGQiLCJmb250TGlua3MiLCJ1c2VNZW1vIiwiZnJvbSIsImZvbnQiLCJyZWwiLCJocmVmIiwiaWQiLCJuYW1lIiwiYm9va21ha2VyTmFtZSIsImJvb2ttYWtlclNpdGUiLCJib29rbWFrZXJDb2xvciIsIm9mZmVyIiwiY29ybmVyIiwibWFyZ2luVG9wIiwibWFyZ2luQm90dG9tIiwibWFyZ2luTGVmdCIsIm1hcmdpblJpZ2h0IiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCIsImNsb3NlIiwidGV4dCIsImlzQm9sZCIsImlzSXRhbGljIiwiaXNUaHJvdWdoIiwidGV4dEFsaWduIiwibGluZUhlaWdodCIsImxldHRlclNwYWNpbmciLCJidXR0b24iLCJiYWNrZ3JvdW5kT3BhY2l0eSIsImlzQW5pbWF0ZWQiLCJsZWdhbCIsImJ1dHRvbk9wZW5UZXh0IiwiYnV0dG9uSGlkZVRleHQiLCJsb2dvIiwibWluV2lkdGgiLCJiYWNrZ3JvdW5kRml0IiwiU2ltcGxlR2lmdCIsInJvb3RSZWYiLCJsZWdhbElzT3BlbiIsInRvZ2dsZUxlZ2FsSXNPcGVuIiwib25DbGljayIsInN0eWxlcyIsImZhZGVpbiIsIm5ld1N0YXRlIiwibW9kaWZ5U3RhdGUiLCJfanN4cyIsImNsYXNzTmFtZSIsInJlZiIsInN0eWxlIiwiaWNvblRhcmdldCIsImJvZHkiLCJib2R5T3BlbiIsImFycm93IiwiYnV0dG9uQW5pbWF0ZWQiLCJsZWdhbE9wZW4iLCJsZWdhbFRleHQiLCJsZWdhbEJ1dHRvbiIsIkJvbnVzQ2FyZCIsInZhcmlhbnQyIiwidmFyaWFudCIsImxpbmUiLCJib2R5SW5uZXIiLCJidXR0b25UZXh0IiwiQ29tcGxleEdpZnQiLCJwcm9tb3Rpb24iLCJ0aXRsZSIsImhlYWRJY29uIiwiaGVhZFRpdGxlIiwiY2hpbGQiLCJzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgiLCJjZW50ZXIiLCJyaWdodCIsIkxpbmUiLCJTaW1wbGVQb3B1cCIsImFsaWduSXRlbXMiLCJhbGlnbiIsImJ1dHRvblJ1bGVzIiwianVzdGlmeUNvbnRlbnQiLCJsZWdhbFJ1bGVzIiwiQm9udXMiLCJoZWFkZXIiLCJ3cmFwcGVyIiwiTWF0Y2giLCJ0ZWFtcyIsImxlYWd1ZSIsInRlYW1BIiwidGVhbUIiLCJ0ZWFtIiwidGVhbUxvZ28iLCJ0ZWFtTmFtZSIsIm9kZCIsIm9kZExhYmVsIiwib2RkVmFsdWUiLCJidXR0b25XcmFwcGVyIiwiY29udGVudFJ1bGVzIiwiY29udGVudCIsInRleHRSdWxlcyIsImJ1dHRvbkhlYWQiLCJidXR0b25UYXJnZXQiLCJ0b2dnbGVJc09wZW4iLCJyb3dGaXJzdCIsInJvd1NlY29uZCIsImJvb2ttYWtlciIsImxlZ2FsSW5mbyIsImxlZ2FsSW5mb0J1dHRvbiIsIm9wZW5UZXh0IiwiY2xvc2VUZXh0IiwiVGV4dCIsIk1hdGNoZXMiLCJyb290UnVsZXMiLCJvZGRMb2dvIiwidmFsdWVPbmUiLCJjb2VmIiwiY29lZkhlYWQiLCJjb2VmVmFsdWUiLCJ2YWx1ZVgiLCJvZGRSZXZlcnNlIiwidmFsdWVUd28iLCJNYXRjaGVzT25lVHdvIiwidGl0bGVMYWJlbCIsInRpdGxlVmFsdWUiLCJ0ZWFtMU5hbWUiLCJ0ZWFtVmFsdWUiLCJ2YWx1ZTEiLCJ0ZWFtMk5hbWUiLCJ2YWx1ZTIiLCJ1c2VBbmltYXRlZExpc3QiLCJzbGlkZXMiLCJpdGVtc0NvdW50IiwiYW5pbWF0ZWRJZHgiLCJzZXRBbmltYXRlZElkeCIsImFuaW1hdGlvbkR1cmF0aW9uIiwiZ29OZXh0IiwidGltZW91dCIsIkRFRkFVTFRfQU5JTUFUSU9OX1NQRUVEIiwiV2lkZUNhcmQiLCJnZXRDaGlsZCIsIm1hdGNoZXMiLCJtYXRjaGVzT25lVHdvIiwic2xpZGVzTGlzdCIsImZpbHRlciIsIkJvb2xlYW4iLCJzbGlkZSIsImFuaW1hdGlvbk5hbWUiLCJjdXJyZW50U2xpZGUiLCJzbGlkZVJ1bGVzIiwiYmFja2dyb3VuZFJ1bGVzIiwiaGFzQ3VzdG9tQmFja2dyb3VuZCIsImRldmljZXNMaXN0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU9BLEtBQUMsV0FBWTtBQUdaLFVBQUksU0FBUyxDQUFFLEVBQUM7QUFHaEIsZUFBU0EsY0FBYTtBQUNyQixZQUFJLFVBQVUsQ0FBQTtBQUVkLGlCQUFTQyxLQUFJLEdBQUdBLEtBQUksVUFBVSxRQUFRQSxNQUFLO0FBQzFDLGNBQUksTUFBTSxVQUFVQSxFQUFDO0FBQ3JCLGNBQUksQ0FBQztBQUFLO0FBRVYsY0FBSSxVQUFVLE9BQU87QUFFckIsY0FBSSxZQUFZLFlBQVksWUFBWSxVQUFVO0FBQ2pELG9CQUFRLEtBQUssR0FBRztBQUFBLFVBQ2hCLFdBQVUsTUFBTSxRQUFRLEdBQUcsR0FBRztBQUM5QixnQkFBSSxJQUFJLFFBQVE7QUFDZixrQkFBSUMsU0FBUUYsWUFBVyxNQUFNLE1BQU0sR0FBRztBQUN0QyxrQkFBSUUsUUFBTztBQUNWLHdCQUFRLEtBQUtBLE1BQUs7QUFBQSxjQUNsQjtBQUFBLFlBQ0Q7QUFBQSxVQUNMLFdBQWMsWUFBWSxVQUFVO0FBQ2hDLGdCQUFJLElBQUksYUFBYSxPQUFPLFVBQVUsWUFBWSxDQUFDLElBQUksU0FBUyxTQUFRLEVBQUcsU0FBUyxlQUFlLEdBQUc7QUFDckcsc0JBQVEsS0FBSyxJQUFJLFNBQVUsQ0FBQTtBQUMzQjtBQUFBLFlBQ0E7QUFFRCxxQkFBUyxPQUFPLEtBQUs7QUFDcEIsa0JBQUksT0FBTyxLQUFLLEtBQUssR0FBRyxLQUFLLElBQUksR0FBRyxHQUFHO0FBQ3RDLHdCQUFRLEtBQUssR0FBRztBQUFBLGNBQ2hCO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBRUQsZUFBTyxRQUFRLEtBQUssR0FBRztBQUFBLE1BQ3ZCO0FBRUQsVUFBcUNDLFFBQU8sU0FBUztBQUNwRCxRQUFBSCxZQUFXLFVBQVVBO0FBQ3JCLFFBQUFHLFFBQUEsVUFBaUJIO0FBQUEsTUFDbkIsT0FLUTtBQUNOLGVBQU8sYUFBYUE7QUFBQSxNQUNwQjtBQUFBLElBQ0Y7OztBQzNEaUMsTUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFSSxNQUFFLEdBQUUsSUFBRSxDQUFBLEdBQUcsSUFBRSxJQUFHLElBQUVDLE9BQUMsUUFBQyxLQUFJLElBQUVBLE9BQUMsUUFBQyxLQUFJLElBQUVBLE9BQUMsUUFBQyxRQUFPLElBQUVBLE9BQUMsUUFBQyxLQUFJLElBQUVBLE9BQUMsUUFBQztBQUFRLFdBQVMsRUFBRUMsSUFBRUMsSUFBRTtBQUFDRixXQUFDLFFBQUMsT0FBS0EsT0FBQUEsUUFBRSxJQUFJLEdBQUVDLElBQUVGLE9BQUdHLEVBQUMsR0FBRUgsTUFBRTtBQUFFLFFBQUlILEtBQUUsRUFBRSxRQUFNLEVBQUUsTUFBSSxFQUFDLElBQUcsSUFBRyxLQUFJLENBQUUsRUFBQTtBQUFHLFdBQU9LLE1BQUdMLEdBQUUsR0FBRyxVQUFRQSxHQUFFLEdBQUcsS0FBSyxFQUFDLEtBQUksRUFBQyxDQUFDLEdBQUVBLEdBQUUsR0FBR0ssRUFBQztBQUFBLEVBQUM7QUFBQyxXQUFTLEVBQUUsR0FBRTtBQUFDLFdBQU9GLE1BQUUsR0FBRSxFQUFFSSxLQUFFLENBQUM7QUFBQSxFQUFDO0FBQUMsV0FBUyxFQUFFLEdBQUVELElBQUVOLElBQUU7QUFBQyxRQUFJRyxLQUFFLEVBQUUsS0FBSSxDQUFDO0FBQUUsUUFBR0EsR0FBRSxJQUFFLEdBQUUsQ0FBQ0EsR0FBRSxRQUFNQSxHQUFFLEtBQUcsQ0FBQ0gsS0FBRUEsR0FBRU0sRUFBQyxJQUFFQyxJQUFFLFFBQU9ELEVBQUMsR0FBRSxTQUFTRixJQUFFO0FBQUMsVUFBSUMsS0FBRUYsR0FBRSxNQUFJQSxHQUFFLElBQUksQ0FBQyxJQUFFQSxHQUFFLEdBQUcsQ0FBQyxHQUFFSyxLQUFFTCxHQUFFLEVBQUVFLElBQUVELEVBQUM7QUFBRSxNQUFBQyxPQUFJRyxPQUFJTCxHQUFFLE1BQUksQ0FBQ0ssSUFBRUwsR0FBRSxHQUFHLENBQUMsQ0FBQyxHQUFFQSxHQUFFLElBQUksU0FBUyxDQUFFLENBQUE7QUFBQSxJQUFFLENBQUMsR0FBRUEsR0FBRSxNQUFJLEdBQUUsQ0FBQyxFQUFFLElBQUc7QUFB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SSxRQUFNTyxPQUFJLEVBQUUsSUFBSSxNQUFJTixLQUFHLEVBQUUsTUFBSSxPQUFNLEVBQUUsTUFBSSxFQUFFLE9BQUssRUFBRSxJQUFJLElBQUksU0FBU0QsSUFBRTtBQUFDLGFBQU8sRUFBRUEsSUFBRUMsSUFBRU0sRUFBQztBQUFBLElBQUMsQ0FBQyxJQUFHO0FBQUEsRUFBQztBQUFDLFdBQVMsRUFBRSxHQUFFTixJQUFFTSxJQUFFO0FBQUMsV0FBTyxNQUFJLEVBQUUsTUFBSSxNQUFLLEVBQUUsTUFBSSxFQUFFLE9BQUssRUFBRSxJQUFJLElBQUksU0FBU1AsSUFBRTtBQUFDLGFBQU8sRUFBRUEsSUFBRUMsSUFBRU0sRUFBQztBQUFBLElBQUMsQ0FBQyxHQUFFLEVBQUUsT0FBSyxFQUFFLElBQUksUUFBTU4sT0FBSSxFQUFFLE9BQUtNLEdBQUUsYUFBYSxFQUFFLEtBQUksRUFBRSxHQUFHLEdBQUUsRUFBRSxJQUFJLE1BQUksTUFBRyxFQUFFLElBQUksTUFBSUEsTUFBSTtBQUFBLEVBQUM7QUFBQyxXQUFTLElBQUc7QUFBQyxTQUFLLE1BQUksR0FBRSxLQUFLLElBQUUsTUFBSyxLQUFLLE1BQUk7QUFBQSxFQUFJO0FBQUMsV0FBUyxFQUFFLEdBQUU7QUFBQyxRQUFJTixLQUFFLEVBQUUsR0FBRztBQUFJLFdBQU9BLE1BQUdBLEdBQUUsT0FBS0EsR0FBRSxJQUFJLENBQUM7QUFBQSxFQUFDO0FBQXFMLFdBQVMsSUFBRztBQUFDLFNBQUssSUFBRSxNQUFLLEtBQUssSUFBRTtBQUFBLEVBQUk7QUFBQ00sU0FBQyxRQUFDLFVBQVEsU0FBUyxHQUFFO0FBQUMsUUFBSU4sS0FBRSxFQUFFO0FBQUksSUFBQUEsTUFBR0EsR0FBRSxPQUFLQSxHQUFFLElBQUcsR0FBR0EsTUFBRyxTQUFLLEVBQUUsUUFBTSxFQUFFLE9BQUssT0FBTSxLQUFHLEVBQUUsQ0FBQztBQUFBLEVBQUMsSUFBRyxFQUFFLFlBQVUsSUFBSUQsT0FBQUEsYUFBRyxNQUFJLFNBQVMsR0FBRUMsSUFBRTtBQUFDLFFBQUlNLEtBQUVOLEdB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QU0sR0FBRztBQUFBLFVBQ1IsR0FBR2lMLFNBQVN4SSxLQUFLLEVBQUV6QyxNQUFNO0FBQUEsVUFDekIsQ0FBQ2tFLElBQUksR0FBRyxPQUFPMVEsVUFBVSxhQUFhQSxNQUFNcUssSUFBSW9OLFVBQVcsR0FBRXhJLFNBQVN6QyxVQUFVa0UsTUFBTSxDQUFDLElBQUkxUTtBQUFBQSxRQUM3RjtBQUFBLE1BQUE7QUFBQSxJQUNGLENBQ0Q7QUFDTXlYLFdBQUFBO0FBQUFBLEVBQ1Q7Ozs7Ozs7Ozs7OyIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswLDEsMiw0LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDNdfQ==
|
2864
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLnVtZC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2hvb2tzL2Rpc3QvaG9va3MubW9kdWxlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9jb21wYXQvZGlzdC9jb21wYXQubW9kdWxlLmpzIiwiLi4vc3JjL2hvb2tzL3VzZUdpZnRPcGVuLnRzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9qc3gtcnVudGltZS9kaXN0L2pzeFJ1bnRpbWUubW9kdWxlLmpzIiwiLi4vc3JjL1N0YXRlQ29udGV4dC50c3giLCIuLi9zcmMvaGVscGVycy9yZW5kZXIudHN4IiwiLi4vc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZS50cyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUNsZWFyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9lcS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc29jSW5kZXhPZi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUdldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUhhcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0xpc3RDYWNoZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0RlbGV0ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrR2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tIYXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mcmVlR2xvYmFsLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcm9vdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N5bWJvbC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFJhd1RhZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX29iamVjdFRvU3RyaW5nLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldFRhZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRnVuY3Rpb24uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3JlSnNEYXRhLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNNYXNrZWQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b1NvdXJjZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc05hdGl2ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFZhbHVlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TmF0aXZlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaENsZWFyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaERlbGV0ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hHZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoSGFzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaFNldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUNsZWFyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNLZXlhYmxlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWFwRGF0YS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVHZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUhhcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwQ2FjaGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja1NldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N0YWNrLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZGVmaW5lUHJvcGVydHkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduVmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hc3NpZ25NZXJnZVZhbHVlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQmFzZUZvci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGb3IuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUJ1ZmZlci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1VpbnQ4QXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUFycmF5QnVmZmVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVUeXBlZEFycmF5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weUFycmF5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUNyZWF0ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJBcmcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRQcm90b3R5cGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc1Byb3RvdHlwZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2luaXRDbG9uZU9iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzQXJndW1lbnRzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FyZ3VtZW50cy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZU9iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkZhbHNlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0J1ZmZlci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNQbGFpbk9iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1R5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5hcnkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19ub2RlVXRpbC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNUeXBlZEFycmF5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2FmZUdldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc2lnblZhbHVlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weU9iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUaW1lcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUxpa2VLZXlzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlS2V5c0luLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUtleXNJbi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5c0luLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b1BsYWluT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1lcmdlRGVlcC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VNZXJnZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaWRlbnRpdHkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJSZXN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9jb25zdGFudC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTZXRUb1N0cmluZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Nob3J0T3V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9TdHJpbmcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUmVzdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSXRlcmF0ZWVDYWxsLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQXNzaWduZXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL21lcmdlLmpzIiwiLi4vLi4vdXRpbHMvZG9tLnRzIiwiLi4vLi4vdXRpbHMvaXRlcmF0b3IudHMiLCIuLi8uLi91dGlscy9pbmRleC50cyIsIi4uL3NyYy9oZWxwZXJzL2dldERldmljZVN0YXRlLnRzIiwiLi4vc3JjL2hvb2tzL3VzZURldmljZVN0YXRlLnRzIiwiLi4vc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZS50cyIsIi4uL3NyYy9oZWxwZXJzL3BhcnNlUnVsZXMudHMiLCIuLi9zcmMvaG9va3MvdXNlUGFyc2VSdWxlcy50cyIsIi4uL3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0LnRzeCIsIi4uL3NyYy9ob29rcy91c2VUb2dnbGUudHMiLCIuLi9zcmMvY29tcG9uZW50cy9DbG9zZUljb24udHN4IiwiLi4vc3JjL2NvbXBvbmVudHMvR2lmdEljb24udHN4IiwiLi4vc3JjL2hvb2tzL3Byb21vcy91c2VHaWZ0UnVsZXMudHMiLCIuLi9zcmMvaGVscGVycy9jb25zdGFudHMudHMiLCIuLi9zcmMvaG9va3MvdXNlTWV0cmljcy50cyIsIi4uL3NyYy9ob29rcy91c2VFeHRyYWN0Rm9udHMudHMiLCIuLi9zcmMvcHJvbW9zL1NpbXBsZUdpZnQvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9Db21wbGV4R2lmdC9jb21wb25lbnRzL0JvbnVzQ2FyZC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0NvbXBsZXhHaWZ0L2luZGV4LnRzeCIsIi4uL3NyYy9oZWxwZXJzL3N3aXRjaFRleHRBbGlnblRvRmxleC50cyIsIi4uL3NyYy9wcm9tb3MvU2ltcGxlUG9wdXAvY29tcG9uZW50cy9saW5lL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvU2ltcGxlUG9wdXAvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9Db21wbGV4UG9wdXAvY29tcG9uZW50cy9Cb251cy9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0NvbXBsZXhQb3B1cC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0V4cHJlc3NQb3B1cC9jb21wb25lbnRzL01hdGNoL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvRXhwcmVzc1BvcHVwL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvQm9udXNDYXJkL2NvbXBvbmVudHMvQm9udXMvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9Cb251c0NhcmQvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9XaWRlQ2FyZC9jb21wb25lbnRzL1RleHQvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9XaWRlQ2FyZC9jb21wb25lbnRzL01hdGNoZXMvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9XaWRlQ2FyZC9jb21wb25lbnRzL01hdGNoZXNPbmVUd28vaW5kZXgudHN4IiwiLi4vc3JjL2hvb2tzL3VzZUFuaW1hdGVkTGlzdC50cyIsIi4uL3NyYy9wcm9tb3MvV2lkZUNhcmQvaW5kZXgudHN4IiwiLi4vc3JjL2hlbHBlcnMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyohXG5cdENvcHlyaWdodCAoYykgMjAxOCBKZWQgV2F0c29uLlxuXHRMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxuXHRodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXG4qL1xuLyogZ2xvYmFsIGRlZmluZSAqL1xuXG4oZnVuY3Rpb24gKCkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXHR2YXIgbmF0aXZlQ29kZVN0cmluZyA9ICdbbmF0aXZlIGNvZGVdJztcblxuXHRmdW5jdGlvbiBjbGFzc05hbWVzKCkge1xuXHRcdHZhciBjbGFzc2VzID0gW107XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGlmICghYXJnKSBjb250aW51ZTtcblxuXHRcdFx0dmFyIGFyZ1R5cGUgPSB0eXBlb2YgYXJnO1xuXG5cdFx0XHRpZiAoYXJnVHlwZSA9PT0gJ3N0cmluZycgfHwgYXJnVHlwZSA9PT0gJ251bWJlcicpIHtcblx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGFyZyk7XG5cdFx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuXHRcdFx0XHRpZiAoYXJnLmxlbmd0aCkge1xuXHRcdFx0XHRcdHZhciBpbm5lciA9IGNsYXNzTmFtZXMuYXBwbHkobnVsbCwgYXJnKTtcblx0XHRcdFx0XHRpZiAoaW5uZXIpIHtcblx0XHRcdFx0XHRcdGNsYXNzZXMucHVzaChpbm5lcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGFyZ1R5cGUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdGlmIChhcmcudG9TdHJpbmcgIT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgJiYgIWFyZy50b1N0cmluZy50b1N0cmluZygpLmluY2x1ZGVzKCdbbmF0aXZlIGNvZGVdJykpIHtcblx0XHRcdFx0XHRjbGFzc2VzLnB1c2goYXJnLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xuXHRcdFx0XHRcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcblx0XHRcdFx0XHRcdGNsYXNzZXMucHVzaChrZXkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcblx0fVxuXG5cdGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRcdGNsYXNzTmFtZXMuZGVmYXVsdCA9IGNsYXNzTmFtZXM7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyByZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBucG0gcGFja2FnZSBuYW1lXG5cdFx0ZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcblx0fVxufSgpKTtcbiIsImltcG9ydHtvcHRpb25zIGFzIG59ZnJvbVwicHJlYWN0XCI7dmFyIHQscix1LGksbz0wLGY9W10sYz1bXSxlPW4uX19iLGE9bi5fX3Isdj1uLmRpZmZlZCxsPW4uX19jLG09bi51bm1vdW50O2Z1bmN0aW9uIGQodCx1KXtuLl9faCYmbi5fX2gocix0LG98fHUpLG89MDt2YXIgaT1yLl9fSHx8KHIuX19IPXtfXzpbXSxfX2g6W119KTtyZXR1cm4gdD49aS5fXy5sZW5ndGgmJmkuX18ucHVzaCh7X19WOmN9KSxpLl9fW3RdfWZ1bmN0aW9uIGgobil7cmV0dXJuIG89MSxzKEIsbil9ZnVuY3Rpb24gcyhuLHUsaSl7dmFyIG89ZCh0KyssMik7aWYoby50PW4sIW8uX19jJiYoby5fXz1baT9pKHUpOkIodm9pZCAwLHUpLGZ1bmN0aW9uKG4pe3ZhciB0PW8uX19OP28uX19OWzBdOm8uX19bMF0scj1vLnQodCxuKTt0IT09ciYmKG8uX19OPVtyLG8uX19bMV1dLG8uX19jLnNldFN0YXRlKHt9KSl9XSxvLl9fYz1yLCFyLnUpKXt2YXIgZj1mdW5jdGlvbihuLHQscil7aWYoIW8uX19jLl9fSClyZXR1cm4hMDt2YXIgdT1vLl9fYy5fX0guX18uZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBuLl9fY30pO2lmKHUuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIW4uX19OfSkpcmV0dXJuIWN8fGMuY2FsbCh0aGlzLG4sdCxyKTt2YXIgaT0hMTtyZXR1cm4gdS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKG4uX19OKXt2YXIgdD1uLl9fWzBdO24uX189bi5fX04sbi5fX049dm9pZCAwLHQhPT1uLl9fWzBdJiYoaT0hMCl9fSksISghaSYmby5fX2MucHJvcHM9PT1uKSYmKCFjfHxjLmNhbGwodGhpcyxuLHQscikpfTtyLnU9ITA7dmFyIGM9ci5zaG91bGRDb21wb25lbnRVcGRhdGUsZT1yLmNvbXBvbmVudFdpbGxVcGRhdGU7ci5jb21wb25lbnRXaWxsVXBkYXRlPWZ1bmN0aW9uKG4sdCxyKXtpZih0aGlzLl9fZSl7dmFyIHU9YztjPXZvaWQgMCxmKG4sdCxyKSxjPXV9ZSYmZS5jYWxsKHRoaXMsbix0LHIpfSxyLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mfXJldHVybiBvLl9fTnx8by5fX31mdW5jdGlvbiBwKHUsaSl7dmFyIG89ZCh0KyssMyk7IW4uX19zJiZ6KG8uX19ILGkpJiYoby5fXz11LG8uaT1pLHIuX19ILl9faC5wdXNoKG8pKX1mdW5jdGlvbiB5KHUsaSl7dmFyIG89ZCh0KyssNCk7IW4uX19zJiZ6KG8uX19ILGkpJiYoby5fXz11LG8uaT1pLHIuX19oLnB1c2gobykpfWZ1bmN0aW9uIF8obil7cmV0dXJuIG89NSxGKGZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bn19LFtdKX1mdW5jdGlvbiBBKG4sdCxyKXtvPTYseShmdW5jdGlvbigpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIG4/KG4odCgpKSxmdW5jdGlvbigpe3JldHVybiBuKG51bGwpfSk6bj8obi5jdXJyZW50PXQoKSxmdW5jdGlvbigpe3JldHVybiBuLmN1cnJlbnQ9bnVsbH0pOnZvaWQgMH0sbnVsbD09cj9yOnIuY29uY2F0KG4pKX1mdW5jdGlvbiBGKG4scil7dmFyIHU9ZCh0KyssNyk7cmV0dXJuIHoodS5fX0gscik/KHUuX19WPW4oKSx1Lmk9cix1Ll9faD1uLHUuX19WKTp1Ll9ffWZ1bmN0aW9uIFQobix0KXtyZXR1cm4gbz04LEYoZnVuY3Rpb24oKXtyZXR1cm4gbn0sdCl9ZnVuY3Rpb24gcShuKXt2YXIgdT1yLmNvbnRleHRbbi5fX2NdLGk9ZCh0KyssOSk7cmV0dXJuIGkuYz1uLHU/KG51bGw9PWkuX18mJihpLl9fPSEwLHUuc3ViKHIpKSx1LnByb3BzLnZhbHVlKTpuLl9ffWZ1bmN0aW9uIHgodCxyKXtuLnVzZURlYnVnVmFsdWUmJm4udXNlRGVidWdWYWx1ZShyP3IodCk6dCl9ZnVuY3Rpb24gUChuKXt2YXIgdT1kKHQrKywxMCksaT1oKCk7cmV0dXJuIHUuX189bixyLmNvbXBvbmVudERpZENhdGNofHwoci5jb21wb25lbnREaWRDYXRjaD1mdW5jdGlvbihuLHQpe3UuX18mJnUuX18obix0KSxpWzFdKG4pfSksW2lbMF0sZnVuY3Rpb24oKXtpWzFdKHZvaWQgMCl9XX1mdW5jdGlvbiBWKCl7dmFyIG49ZCh0KyssMTEpO2lmKCFuLl9fKXtmb3IodmFyIHU9ci5fX3Y7bnVsbCE9PXUmJiF1Ll9fbSYmbnVsbCE9PXUuX187KXU9dS5fXzt2YXIgaT11Ll9fbXx8KHUuX19tPVswLDBdKTtuLl9fPVwiUFwiK2lbMF0rXCItXCIraVsxXSsrfXJldHVybiBuLl9ffWZ1bmN0aW9uIGIoKXtmb3IodmFyIHQ7dD1mLnNoaWZ0KCk7KWlmKHQuX19QJiZ0Ll9fSCl0cnl7dC5fX0guX19oLmZvckVhY2goayksdC5fX0guX19oLmZvckVhY2godyksdC5fX0guX19oPVtdfWNhdGNoKHIpe3QuX19ILl9faD1bXSxuLl9fZShyLHQuX192KX19bi5fX2I9ZnVuY3Rpb24obil7cj1udWxsLGUmJmUobil9LG4uX19yPWZ1bmN0aW9uKG4pe2EmJmEobiksdD0wO3ZhciBpPShyPW4uX19jKS5fX0g7aSYmKHU9PT1yPyhpLl9faD1bXSxyLl9faD1bXSxpLl9fLmZvckVhY2goZnVuY3Rpb24obil7bi5fX04mJihuLl9fPW4uX19OKSxuLl9fVj1jLG4uX19OPW4uaT12b2lkIDB9KSk6KGkuX19oLmZvckVhY2goayksaS5fX2guZm9yRWFjaCh3KSxpLl9faD1bXSkpLHU9cn0sbi5kaWZmZWQ9ZnVuY3Rpb24odCl7diYmdih0KTt2YXIgbz10Ll9fYztvJiZvLl9fSCYmKG8uX19ILl9faC5sZW5ndGgmJigxIT09Zi5wdXNoKG8pJiZpPT09bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fCgoaT1uLnJlcXVlc3RBbmltYXRpb25GcmFtZSl8fGopKGIpKSxvLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKG4pe24uaSYmKG4uX19IPW4uaSksbi5fX1YhPT1jJiYobi5fXz1uLl9fViksbi5pPXZvaWQgMCxuLl9fVj1jfSkpLHU9cj1udWxsfSxuLl9fYz1mdW5jdGlvbih0LHIpe3Iuc29tZShmdW5jdGlvbih0KXt0cnl7dC5fX2guZm9yRWFjaChrKSx0Ll9faD10Ll9faC5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIW4uX198fHcobil9KX1jYXRjaCh1KXtyLnNvbWUoZnVuY3Rpb24obil7bi5fX2gmJihuLl9faD1bXSl9KSxyPVtdLG4uX19lKHUsdC5fX3YpfX0pLGwmJmwodCxyKX0sbi51bm1vdW50PWZ1bmN0aW9uKHQpe20mJm0odCk7dmFyIHIsdT10Ll9fYzt1JiZ1Ll9fSCYmKHUuX19ILl9fLmZvckVhY2goZnVuY3Rpb24obil7dHJ5e2sobil9Y2F0Y2gobil7cj1ufX0pLHUuX19IPXZvaWQgMCxyJiZuLl9fZShyLHUuX192KSl9O3ZhciBnPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZTtmdW5jdGlvbiBqKG4pe3ZhciB0LHI9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodSksZyYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodCksc2V0VGltZW91dChuKX0sdT1zZXRUaW1lb3V0KHIsMTAwKTtnJiYodD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocikpfWZ1bmN0aW9uIGsobil7dmFyIHQ9cix1PW4uX19jO1wiZnVuY3Rpb25cIj09dHlwZW9mIHUmJihuLl9fYz12b2lkIDAsdSgpKSxyPXR9ZnVuY3Rpb24gdyhuKXt2YXIgdD1yO24uX19jPW4uX18oKSxyPXR9ZnVuY3Rpb24geihuLHQpe3JldHVybiFufHxuLmxlbmd0aCE9PXQubGVuZ3RofHx0LnNvbWUoZnVuY3Rpb24odCxyKXtyZXR1cm4gdCE9PW5bcl19KX1mdW5jdGlvbiBCKG4sdCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdD90KG4pOnR9ZXhwb3J0e1QgYXMgdXNlQ2FsbGJhY2sscSBhcyB1c2VDb250ZXh0LHggYXMgdXNlRGVidWdWYWx1ZSxwIGFzIHVzZUVmZmVjdCxQIGFzIHVzZUVycm9yQm91bmRhcnksViBhcyB1c2VJZCxBIGFzIHVzZUltcGVyYXRpdmVIYW5kbGUseSBhcyB1c2VMYXlvdXRFZmZlY3QsRiBhcyB1c2VNZW1vLHMgYXMgdXNlUmVkdWNlcixfIGFzIHVzZVJlZixoIGFzIHVzZVN0YXRlfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhvb2tzLm1vZHVsZS5qcy5tYXBcbiIsImltcG9ydHtDb21wb25lbnQgYXMgbixjcmVhdGVFbGVtZW50IGFzIHQsb3B0aW9ucyBhcyBlLHRvQ2hpbGRBcnJheSBhcyByLEZyYWdtZW50IGFzIHUscmVuZGVyIGFzIG8saHlkcmF0ZSBhcyBpLGNyZWF0ZUNvbnRleHQgYXMgbCxjcmVhdGVSZWYgYXMgYyxjbG9uZUVsZW1lbnQgYXMgZn1mcm9tXCJwcmVhY3RcIjtleHBvcnR7Q29tcG9uZW50LEZyYWdtZW50LGNyZWF0ZUNvbnRleHQsY3JlYXRlRWxlbWVudCxjcmVhdGVSZWZ9ZnJvbVwicHJlYWN0XCI7aW1wb3J0e3VzZVN0YXRlIGFzIGEsdXNlSWQgYXMgcyx1c2VSZWR1Y2VyIGFzIGgsdXNlRWZmZWN0IGFzIHYsdXNlTGF5b3V0RWZmZWN0IGFzIGQsdXNlUmVmIGFzIHAsdXNlSW1wZXJhdGl2ZUhhbmRsZSBhcyBtLHVzZU1lbW8gYXMgeSx1c2VDYWxsYmFjayBhcyBfLHVzZUNvbnRleHQgYXMgYix1c2VEZWJ1Z1ZhbHVlIGFzIFN9ZnJvbVwicHJlYWN0L2hvb2tzXCI7ZXhwb3J0KmZyb21cInByZWFjdC9ob29rc1wiO2Z1bmN0aW9uIGcobix0KXtmb3IodmFyIGUgaW4gdCluW2VdPXRbZV07cmV0dXJuIG59ZnVuY3Rpb24gQyhuLHQpe2Zvcih2YXIgZSBpbiBuKWlmKFwiX19zb3VyY2VcIiE9PWUmJiEoZSBpbiB0KSlyZXR1cm4hMDtmb3IodmFyIHIgaW4gdClpZihcIl9fc291cmNlXCIhPT1yJiZuW3JdIT09dFtyXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBFKG4sdCl7cmV0dXJuIG49PT10JiYoMCE9PW58fDEvbj09MS90KXx8biE9biYmdCE9dH1mdW5jdGlvbiB3KG4pe3RoaXMucHJvcHM9bn1mdW5jdGlvbiB4KG4sZSl7ZnVuY3Rpb24gcihuKXt2YXIgdD10aGlzLnByb3BzLnJlZixyPXQ9PW4ucmVmO3JldHVybiFyJiZ0JiYodC5jYWxsP3QobnVsbCk6dC5jdXJyZW50PW51bGwpLGU/IWUodGhpcy5wcm9wcyxuKXx8IXI6Qyh0aGlzLnByb3BzLG4pfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPXIsdChuLGUpfXJldHVybiB1LmRpc3BsYXlOYW1lPVwiTWVtbyhcIisobi5kaXNwbGF5TmFtZXx8bi5uYW1lKStcIilcIix1LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLHUuX19mPSEwLHV9KHcucHJvdG90eXBlPW5ldyBuKS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCx3LnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gQyh0aGlzLnByb3BzLG4pfHxDKHRoaXMuc3RhdGUsdCl9O3ZhciBSPWUuX19iO2UuX19iPWZ1bmN0aW9uKG4pe24udHlwZSYmbi50eXBlLl9fZiYmbi5yZWYmJihuLnByb3BzLnJlZj1uLnJlZixuLnJlZj1udWxsKSxSJiZSKG4pfTt2YXIgTj1cInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIil8fDM5MTE7ZnVuY3Rpb24gayhuKXtmdW5jdGlvbiB0KHQpe3ZhciBlPWcoe30sdCk7cmV0dXJuIGRlbGV0ZSBlLnJlZixuKGUsdC5yZWZ8fG51bGwpfXJldHVybiB0LiQkdHlwZW9mPU4sdC5yZW5kZXI9dCx0LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXQuX19mPSEwLHQuZGlzcGxheU5hbWU9XCJGb3J3YXJkUmVmKFwiKyhuLmRpc3BsYXlOYW1lfHxuLm5hbWUpK1wiKVwiLHR9dmFyIEE9ZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbD09bj9udWxsOnIocihuKS5tYXAodCkpfSxPPXttYXA6QSxmb3JFYWNoOkEsY291bnQ6ZnVuY3Rpb24obil7cmV0dXJuIG4/cihuKS5sZW5ndGg6MH0sb25seTpmdW5jdGlvbihuKXt2YXIgdD1yKG4pO2lmKDEhPT10Lmxlbmd0aCl0aHJvd1wiQ2hpbGRyZW4ub25seVwiO3JldHVybiB0WzBdfSx0b0FycmF5OnJ9LFQ9ZS5fX2U7ZS5fX2U9ZnVuY3Rpb24obix0LGUscil7aWYobi50aGVuKWZvcih2YXIgdSxvPXQ7bz1vLl9fOylpZigodT1vLl9fYykmJnUuX19jKXJldHVybiBudWxsPT10Ll9fZSYmKHQuX19lPWUuX19lLHQuX19rPWUuX19rKSx1Ll9fYyhuLHQpO1Qobix0LGUscil9O3ZhciBJPWUudW5tb3VudDtmdW5jdGlvbiBMKG4sdCxlKXtyZXR1cm4gbiYmKG4uX19jJiZuLl9fYy5fX0gmJihuLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihuKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLl9fYyYmbi5fX2MoKX0pLG4uX19jLl9fSD1udWxsKSxudWxsIT0obj1nKHt9LG4pKS5fX2MmJihuLl9fYy5fX1A9PT1lJiYobi5fX2MuX19QPXQpLG4uX19jPW51bGwpLG4uX19rPW4uX19rJiZuLl9fay5tYXAoZnVuY3Rpb24obil7cmV0dXJuIEwobix0LGUpfSkpLG59ZnVuY3Rpb24gVShuLHQsZSl7cmV0dXJuIG4mJihuLl9fdj1udWxsLG4uX19rPW4uX19rJiZuLl9fay5tYXAoZnVuY3Rpb24obil7cmV0dXJuIFUobix0LGUpfSksbi5fX2MmJm4uX19jLl9fUD09PXQmJihuLl9fZSYmZS5pbnNlcnRCZWZvcmUobi5fX2Usbi5fX2QpLG4uX19jLl9fZT0hMCxuLl9fYy5fX1A9ZSkpLG59ZnVuY3Rpb24gRCgpe3RoaXMuX191PTAsdGhpcy50PW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBGKG4pe3ZhciB0PW4uX18uX19jO3JldHVybiB0JiZ0Ll9fYSYmdC5fX2Eobil9ZnVuY3Rpb24gTShuKXt2YXIgZSxyLHU7ZnVuY3Rpb24gbyhvKXtpZihlfHwoZT1uKCkpLnRoZW4oZnVuY3Rpb24obil7cj1uLmRlZmF1bHR8fG59LGZ1bmN0aW9uKG4pe3U9bn0pLHUpdGhyb3cgdTtpZighcil0aHJvdyBlO3JldHVybiB0KHIsbyl9cmV0dXJuIG8uZGlzcGxheU5hbWU9XCJMYXp5XCIsby5fX2Y9ITAsb31mdW5jdGlvbiBWKCl7dGhpcy51PW51bGwsdGhpcy5vPW51bGx9ZS51bm1vdW50PWZ1bmN0aW9uKG4pe3ZhciB0PW4uX19jO3QmJnQuX19SJiZ0Ll9fUigpLHQmJiEwPT09bi5fX2gmJihuLnR5cGU9bnVsbCksSSYmSShuKX0sKEQucHJvdG90eXBlPW5ldyBuKS5fX2M9ZnVuY3Rpb24obix0KXt2YXIgZT10Ll9fYyxyPXRoaXM7bnVsbD09ci50JiYoci50PVtdKSxyLnQucHVzaChlKTt2YXIgdT1GKHIuX192KSxvPSExLGk9ZnVuY3Rpb24oKXtvfHwobz0hMCxlLl9fUj1udWxsLHU/dShsKTpsKCkpfTtlLl9fUj1pO3ZhciBsPWZ1bmN0aW9uKCl7aWYoIS0tci5fX3Upe2lmKHIuc3RhdGUuX19hKXt2YXIgbj1yLnN0YXRlLl9fYTtyLl9fdi5fX2tbMF09VShuLG4uX19jLl9fUCxuLl9fYy5fX08pfXZhciB0O2ZvcihyLnNldFN0YXRlKHtfX2E6ci5fX2I9bnVsbH0pO3Q9ci50LnBvcCgpOyl0LmZvcmNlVXBkYXRlKCl9fSxjPSEwPT09dC5fX2g7ci5fX3UrK3x8Y3x8ci5zZXRTdGF0ZSh7X19hOnIuX19iPXIuX192Ll9fa1swXX0pLG4udGhlbihpLGkpfSxELnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMudD1bXX0sRC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKG4sZSl7aWYodGhpcy5fX2Ipe2lmKHRoaXMuX192Ll9fayl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxvPXRoaXMuX192Ll9fa1swXS5fX2M7dGhpcy5fX3YuX19rWzBdPUwodGhpcy5fX2IscixvLl9fTz1vLl9fUCl9dGhpcy5fX2I9bnVsbH12YXIgaT1lLl9fYSYmdCh1LG51bGwsbi5mYWxsYmFjayk7cmV0dXJuIGkmJihpLl9faD1udWxsKSxbdCh1LG51bGwsZS5fX2E/bnVsbDpuLmNoaWxkcmVuKSxpXX07dmFyIFc9ZnVuY3Rpb24obix0LGUpe2lmKCsrZVsxXT09PWVbMF0mJm4uby5kZWxldGUodCksbi5wcm9wcy5yZXZlYWxPcmRlciYmKFwidFwiIT09bi5wcm9wcy5yZXZlYWxPcmRlclswXXx8IW4uby5zaXplKSlmb3IoZT1uLnU7ZTspe2Zvcig7ZS5sZW5ndGg+MzspZS5wb3AoKSgpO2lmKGVbMV08ZVswXSlicmVhaztuLnU9ZT1lWzJdfX07ZnVuY3Rpb24gUChuKXtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbi5jb250ZXh0fSxuLmNoaWxkcmVufWZ1bmN0aW9uIGoobil7dmFyIGU9dGhpcyxyPW4uaTtlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7byhudWxsLGUubCksZS5sPW51bGwsZS5pPW51bGx9LGUuaSYmZS5pIT09ciYmZS5jb21wb25lbnRXaWxsVW5tb3VudCgpLG4uX192PyhlLmx8fChlLmk9cixlLmw9e25vZGVUeXBlOjEscGFyZW50Tm9kZTpyLGNoaWxkTm9kZXM6W10sYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24obil7dGhpcy5jaGlsZE5vZGVzLnB1c2gobiksZS5pLmFwcGVuZENoaWxkKG4pfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24obix0KXt0aGlzLmNoaWxkTm9kZXMucHVzaChuKSxlLmkuYXBwZW5kQ2hpbGQobil9LHJlbW92ZUNoaWxkOmZ1bmN0aW9uKG4pe3RoaXMuY2hpbGROb2Rlcy5zcGxpY2UodGhpcy5jaGlsZE5vZGVzLmluZGV4T2Yobik+Pj4xLDEpLGUuaS5yZW1vdmVDaGlsZChuKX19KSxvKHQoUCx7Y29udGV4dDplLmNvbnRleHR9LG4uX192KSxlLmwpKTplLmwmJmUuY29tcG9uZW50V2lsbFVubW91bnQoKX1mdW5jdGlvbiB6KG4sZSl7dmFyIHI9dChqLHtfX3Y6bixpOmV9KTtyZXR1cm4gci5jb250YWluZXJJbmZvPWUscn0oVi5wcm90b3R5cGU9bmV3IG4pLl9fYT1mdW5jdGlvbihuKXt2YXIgdD10aGlzLGU9Rih0Ll9fdikscj10Lm8uZ2V0KG4pO3JldHVybiByWzBdKyssZnVuY3Rpb24odSl7dmFyIG89ZnVuY3Rpb24oKXt0LnByb3BzLnJldmVhbE9yZGVyPyhyLnB1c2godSksVyh0LG4scikpOnUoKX07ZT9lKG8pOm8oKX19LFYucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihuKXt0aGlzLnU9bnVsbCx0aGlzLm89bmV3IE1hcDt2YXIgdD1yKG4uY2hpbGRyZW4pO24ucmV2ZWFsT3JkZXImJlwiYlwiPT09bi5yZXZlYWxPcmRlclswXSYmdC5yZXZlcnNlKCk7Zm9yKHZhciBlPXQubGVuZ3RoO2UtLTspdGhpcy5vLnNldCh0W2VdLHRoaXMudT1bMSwwLHRoaXMudV0pO3JldHVybiBuLmNoaWxkcmVufSxWLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9Vi5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgbj10aGlzO3RoaXMuby5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7VyhuLGUsdCl9KX07dmFyIEI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIil8fDYwMTAzLEg9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sWj0vXm9uKEFuaXxUcmF8VG91fEJlZm9yZUlucHxDb21wbykvLFk9L1tBLVowLTldL2csJD1cInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQscT1mdW5jdGlvbihuKXtyZXR1cm4oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbCgpPy9maWx8Y2hlfHJhZC86L2ZpbHxjaGV8cmEvKS50ZXN0KG4pfTtmdW5jdGlvbiBHKG4sdCxlKXtyZXR1cm4gbnVsbD09dC5fX2smJih0LnRleHRDb250ZW50PVwiXCIpLG8obix0KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlKCksbj9uLl9fYzpudWxsfWZ1bmN0aW9uIEoobix0LGUpe3JldHVybiBpKG4sdCksXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmZSgpLG4/bi5fX2M6bnVsbH1uLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9LFtcImNvbXBvbmVudFdpbGxNb3VudFwiLFwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1wiLFwiY29tcG9uZW50V2lsbFVwZGF0ZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbXCJVTlNBRkVfXCIrdF19LHNldDpmdW5jdGlvbihuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bn0pfX0pfSk7dmFyIEs9ZS5ldmVudDtmdW5jdGlvbiBRKCl7fWZ1bmN0aW9uIFgoKXtyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGV9ZnVuY3Rpb24gbm4oKXtyZXR1cm4gdGhpcy5kZWZhdWx0UHJldmVudGVkfWUuZXZlbnQ9ZnVuY3Rpb24obil7cmV0dXJuIEsmJihuPUsobikpLG4ucGVyc2lzdD1RLG4uaXNQcm9wYWdhdGlvblN0b3BwZWQ9WCxuLmlzRGVmYXVsdFByZXZlbnRlZD1ubixuLm5hdGl2ZUV2ZW50PW59O3ZhciB0bixlbj17ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxybj1lLnZub2RlO2Uudm5vZGU9ZnVuY3Rpb24obil7XCJzdHJpbmdcIj09dHlwZW9mIG4udHlwZSYmZnVuY3Rpb24obil7dmFyIHQ9bi5wcm9wcyxlPW4udHlwZSx1PXt9O2Zvcih2YXIgbyBpbiB0KXt2YXIgaT10W29dO2lmKCEoXCJ2YWx1ZVwiPT09byYmXCJkZWZhdWx0VmFsdWVcImluIHQmJm51bGw9PWl8fCQmJlwiY2hpbGRyZW5cIj09PW8mJlwibm9zY3JpcHRcIj09PWV8fFwiY2xhc3NcIj09PW98fFwiY2xhc3NOYW1lXCI9PT1vKSl7dmFyIGw9by50b0xvd2VyQ2FzZSgpO1wiZGVmYXVsdFZhbHVlXCI9PT1vJiZcInZhbHVlXCJpbiB0JiZudWxsPT10LnZhbHVlP289XCJ2YWx1ZVwiOlwiZG93bmxvYWRcIj09PW8mJiEwPT09aT9pPVwiXCI6XCJvbmRvdWJsZWNsaWNrXCI9PT1sP289XCJvbmRibGNsaWNrXCI6XCJvbmNoYW5nZVwiIT09bHx8XCJpbnB1dFwiIT09ZSYmXCJ0ZXh0YXJlYVwiIT09ZXx8cSh0LnR5cGUpP1wib25mb2N1c1wiPT09bD9vPVwib25mb2N1c2luXCI6XCJvbmJsdXJcIj09PWw/bz1cIm9uZm9jdXNvdXRcIjpaLnRlc3Qobyk/bz1sOi0xPT09ZS5pbmRleE9mKFwiLVwiKSYmSC50ZXN0KG8pP289by5yZXBsYWNlKFksXCItJCZcIikudG9Mb3dlckNhc2UoKTpudWxsPT09aSYmKGk9dm9pZCAwKTpsPW89XCJvbmlucHV0XCIsXCJvbmlucHV0XCI9PT1sJiZ1W289bF0mJihvPVwib25pbnB1dENhcHR1cmVcIiksdVtvXT1pfX1cInNlbGVjdFwiPT1lJiZ1Lm11bHRpcGxlJiZBcnJheS5pc0FycmF5KHUudmFsdWUpJiYodS52YWx1ZT1yKHQuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24obil7bi5wcm9wcy5zZWxlY3RlZD0tMSE9dS52YWx1ZS5pbmRleE9mKG4ucHJvcHMudmFsdWUpfSkpLFwic2VsZWN0XCI9PWUmJm51bGwhPXUuZGVmYXVsdFZhbHVlJiYodS52YWx1ZT1yKHQuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24obil7bi5wcm9wcy5zZWxlY3RlZD11Lm11bHRpcGxlPy0xIT11LmRlZmF1bHRWYWx1ZS5pbmRleE9mKG4ucHJvcHMudmFsdWUpOnUuZGVmYXVsdFZhbHVlPT1uLnByb3BzLnZhbHVlfSkpLHQuY2xhc3MmJiF0LmNsYXNzTmFtZT8odS5jbGFzcz10LmNsYXNzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LFwiY2xhc3NOYW1lXCIsZW4pKToodC5jbGFzc05hbWUmJiF0LmNsYXNzfHx0LmNsYXNzJiZ0LmNsYXNzTmFtZSkmJih1LmNsYXNzPXUuY2xhc3NOYW1lPXQuY2xhc3NOYW1lKSxuLnByb3BzPXV9KG4pLG4uJCR0eXBlb2Y9QixybiYmcm4obil9O3ZhciB1bj1lLl9fcjtlLl9fcj1mdW5jdGlvbihuKXt1biYmdW4obiksdG49bi5fX2N9O3ZhciBvbj1lLmRpZmZlZDtlLmRpZmZlZD1mdW5jdGlvbihuKXtvbiYmb24obik7dmFyIHQ9bi5wcm9wcyxlPW4uX19lO251bGwhPWUmJlwidGV4dGFyZWFcIj09PW4udHlwZSYmXCJ2YWx1ZVwiaW4gdCYmdC52YWx1ZSE9PWUudmFsdWUmJihlLnZhbHVlPW51bGw9PXQudmFsdWU/XCJcIjp0LnZhbHVlKSx0bj1udWxsfTt2YXIgbG49e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6e2N1cnJlbnQ6e3JlYWRDb250ZXh0OmZ1bmN0aW9uKG4pe3JldHVybiB0bi5fX25bbi5fX2NdLnByb3BzLnZhbHVlfX19fSxjbj1cIjE3LjAuMlwiO2Z1bmN0aW9uIGZuKG4pe3JldHVybiB0LmJpbmQobnVsbCxuKX1mdW5jdGlvbiBhbihuKXtyZXR1cm4hIW4mJm4uJCR0eXBlb2Y9PT1CfWZ1bmN0aW9uIHNuKG4pe3JldHVybiBhbihuKT9mLmFwcGx5KG51bGwsYXJndW1lbnRzKTpufWZ1bmN0aW9uIGhuKG4pe3JldHVybiEhbi5fX2smJihvKG51bGwsbiksITApfWZ1bmN0aW9uIHZuKG4pe3JldHVybiBuJiYobi5iYXNlfHwxPT09bi5ub2RlVHlwZSYmbil8fG51bGx9dmFyIGRuPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4odCl9LHBuPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4odCl9LG1uPXU7ZnVuY3Rpb24geW4obil7bigpfWZ1bmN0aW9uIF9uKG4pe3JldHVybiBufWZ1bmN0aW9uIGJuKCl7cmV0dXJuWyExLHluXX12YXIgU249ZDtmdW5jdGlvbiBnbihuLHQpe3ZhciBlPXQoKSxyPWEoe2g6e19fOmUsdjp0fX0pLHU9clswXS5oLG89clsxXTtyZXR1cm4gZChmdW5jdGlvbigpe3UuX189ZSx1LnY9dCxFKHUuX18sdCgpKXx8byh7aDp1fSl9LFtuLGUsdF0pLHYoZnVuY3Rpb24oKXtyZXR1cm4gRSh1Ll9fLHUudigpKXx8byh7aDp1fSksbihmdW5jdGlvbigpe0UodS5fXyx1LnYoKSl8fG8oe2g6dX0pfSl9LFtuXSksZX12YXIgQ249e3VzZVN0YXRlOmEsdXNlSWQ6cyx1c2VSZWR1Y2VyOmgsdXNlRWZmZWN0OnYsdXNlTGF5b3V0RWZmZWN0OmQsdXNlSW5zZXJ0aW9uRWZmZWN0OlNuLHVzZVRyYW5zaXRpb246Ym4sdXNlRGVmZXJyZWRWYWx1ZTpfbix1c2VTeW5jRXh0ZXJuYWxTdG9yZTpnbixzdGFydFRyYW5zaXRpb246eW4sdXNlUmVmOnAsdXNlSW1wZXJhdGl2ZUhhbmRsZTptLHVzZU1lbW86eSx1c2VDYWxsYmFjazpfLHVzZUNvbnRleHQ6Yix1c2VEZWJ1Z1ZhbHVlOlMsdmVyc2lvbjpcIjE3LjAuMlwiLENoaWxkcmVuOk8scmVuZGVyOkcsaHlkcmF0ZTpKLHVubW91bnRDb21wb25lbnRBdE5vZGU6aG4sY3JlYXRlUG9ydGFsOnosY3JlYXRlRWxlbWVudDp0LGNyZWF0ZUNvbnRleHQ6bCxjcmVhdGVGYWN0b3J5OmZuLGNsb25lRWxlbWVudDpzbixjcmVhdGVSZWY6YyxGcmFnbWVudDp1LGlzVmFsaWRFbGVtZW50OmFuLGZpbmRET01Ob2RlOnZuLENvbXBvbmVudDpuLFB1cmVDb21wb25lbnQ6dyxtZW1vOngsZm9yd2FyZFJlZjprLGZsdXNoU3luYzpwbix1bnN0YWJsZV9iYXRjaGVkVXBkYXRlczpkbixTdHJpY3RNb2RlOm1uLFN1c3BlbnNlOkQsU3VzcGVuc2VMaXN0OlYsbGF6eTpNLF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEOmxufTtleHBvcnR7TyBhcyBDaGlsZHJlbix3IGFzIFB1cmVDb21wb25lbnQsbW4gYXMgU3RyaWN0TW9kZSxEIGFzIFN1c3BlbnNlLFYgYXMgU3VzcGVuc2VMaXN0LGxuIGFzIF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELHNuIGFzIGNsb25lRWxlbWVudCxmbiBhcyBjcmVhdGVGYWN0b3J5LHogYXMgY3JlYXRlUG9ydGFsLENuIGFzIGRlZmF1bHQsdm4gYXMgZmluZERPTU5vZGUscG4gYXMgZmx1c2hTeW5jLGsgYXMgZm9yd2FyZFJlZixKIGFzIGh5ZHJhdGUsYW4gYXMgaXNWYWxpZEVsZW1lbnQsTSBhcyBsYXp5LHggYXMgbWVtbyxHIGFzIHJlbmRlcix5biBhcyBzdGFydFRyYW5zaXRpb24saG4gYXMgdW5tb3VudENvbXBvbmVudEF0Tm9kZSxkbiBhcyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyxfbiBhcyB1c2VEZWZlcnJlZFZhbHVlLFNuIGFzIHVzZUluc2VydGlvbkVmZmVjdCxnbiBhcyB1c2VTeW5jRXh0ZXJuYWxTdG9yZSxibiBhcyB1c2VUcmFuc2l0aW9uLGNuIGFzIHZlcnNpb259O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tcGF0Lm1vZHVsZS5qcy5tYXBcbiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5cbmV4cG9ydCBjb25zdCB1c2VHaWZ0T3BlbiA9IChkZWxheSA9IDEwMDApID0+IHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCB0aW1lclJlZiA9IHVzZVJlZihudWxsKVxuXG4gIGNvbnN0IG9uVG9nZ2xlID0gKCkgPT4ge1xuICAgIGNsZWFyVGltZW91dCh0aW1lclJlZi5jdXJyZW50KVxuICAgIHNldElzT3BlbihwcmV2ID0+ICFwcmV2KVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICB0aW1lclJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZXRJc09wZW4odHJ1ZSlcbiAgICB9LCBkZWxheSlcblxuICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodGltZXJSZWYuY3VycmVudClcbiAgfSwgW2RlbGF5XSlcblxuICByZXR1cm4ge1xuICAgIGlzT3BlbixcbiAgICBvblRvZ2dsZVxuICB9XG59XG4iLCJpbXBvcnR7b3B0aW9ucyBhcyByfWZyb21cInByZWFjdFwiO2V4cG9ydHtGcmFnbWVudH1mcm9tXCJwcmVhY3RcIjt2YXIgXz0wO2Z1bmN0aW9uIG8obyxlLG4sdCxmLGwpe3ZhciBzLHUsYT17fTtmb3IodSBpbiBlKVwicmVmXCI9PXU/cz1lW3VdOmFbdV09ZVt1XTt2YXIgaT17dHlwZTpvLHByb3BzOmEsa2V5Om4scmVmOnMsX19rOm51bGwsX186bnVsbCxfX2I6MCxfX2U6bnVsbCxfX2Q6dm9pZCAwLF9fYzpudWxsLF9faDpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6LS1fLF9fc291cmNlOmYsX19zZWxmOmx9O2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG8mJihzPW8uZGVmYXVsdFByb3BzKSlmb3IodSBpbiBzKXZvaWQgMD09PWFbdV0mJihhW3VdPXNbdV0pO3JldHVybiByLnZub2RlJiZyLnZub2RlKGkpLGl9ZXhwb3J0e28gYXMganN4LG8gYXMganN4REVWLG8gYXMganN4c307XG4vLyMgc291cmNlTWFwcGluZ1VSTD1qc3hSdW50aW1lLm1vZHVsZS5qcy5tYXBcbiIsImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdwcmVhY3QnXG5cbmV4cG9ydCBjb25zdCBTdGF0ZSA9IGNyZWF0ZUNvbnRleHQoKVxuXG5jb25zdCBTdGF0ZUNvbnRleHQgPSAoeyBjaGlsZHJlbiwgdmFsdWUgfSkgPT4ge1xuICByZXR1cm4gPFN0YXRlLlByb3ZpZGVyIHZhbHVlPXt2YWx1ZX0+e2NoaWxkcmVufTwvU3RhdGUuUHJvdmlkZXI+XG59XG5cbmV4cG9ydCBkZWZhdWx0IFN0YXRlQ29udGV4dFxuIiwiaW1wb3J0IHsgQ29tcG9uZW50Q2hpbGQsIENvbnRhaW5lck5vZGUsIHJlbmRlciBhcyBwcmVhY3RSZW5kZXIgfSBmcm9tICdwcmVhY3QnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJy4uL1N0YXRlQ29udGV4dCdcblxuZXhwb3J0IGNvbnN0IHJlbmRlciA9ICh2Tm9kZTogQ29tcG9uZW50Q2hpbGQpID0+ICh0YXJnZXQ6IENvbnRhaW5lck5vZGUsIHN0YXRlPzogYW55KSA9PlxuICBwcmVhY3RSZW5kZXIoPFN0YXRlQ29udGV4dCB2YWx1ZT17c3RhdGV9Pnt2Tm9kZX08L1N0YXRlQ29udGV4dD4sIHRhcmdldCBhcyBIVE1MRWxlbWVudClcbiIsImltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuaW1wb3J0IHsgU3RhdGUgfSBmcm9tIFwiLi4vU3RhdGVDb250ZXh0XCI7XG5cbmV4cG9ydCBjb25zdCB1c2VDdXJyZW50U3RhdGUgPSA8VFZhbHVlID0gdW5rbm93bj4oKSA9PiB1c2VDb250ZXh0PFRWYWx1ZT4oU3RhdGUpXG4iLCIvKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlQ2xlYXI7XG4iLCIvKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcTtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NvY0luZGV4T2Y7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTtcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgIGRhdGEucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICB9XG4gIC0tdGhpcy5zaXplO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVEZWxldGU7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlR2V0O1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVIYXM7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbGlzdCBjYWNoZSBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgKyt0aGlzLnNpemU7XG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0gZWxzZSB7XG4gICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVTZXQ7XG4iLCJ2YXIgbGlzdENhY2hlQ2xlYXIgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVDbGVhcicpLFxuICAgIGxpc3RDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZURlbGV0ZScpLFxuICAgIGxpc3RDYWNoZUdldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUdldCcpLFxuICAgIGxpc3RDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUhhcycpLFxuICAgIGxpc3RDYWNoZVNldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZVNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gbGlzdCBjYWNoZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIExpc3RDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxuTGlzdENhY2hlLnByb3RvdHlwZS5jbGVhciA9IGxpc3RDYWNoZUNsZWFyO1xuTGlzdENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBsaXN0Q2FjaGVEZWxldGU7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmdldCA9IGxpc3RDYWNoZUdldDtcbkxpc3RDYWNoZS5wcm90b3R5cGUuaGFzID0gbGlzdENhY2hlSGFzO1xuTGlzdENhY2hlLnByb3RvdHlwZS5zZXQgPSBsaXN0Q2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTGlzdENhY2hlO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIFN0YWNrXG4gKi9cbmZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrQ2xlYXI7XG4iLCIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgcmVzdWx0ID0gZGF0YVsnZGVsZXRlJ10oa2V5KTtcblxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tEZWxldGU7XG4iLCIvKipcbiAqIEdldHMgdGhlIHN0YWNrIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzdGFja0dldChrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tHZXQ7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBhIHN0YWNrIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tIYXMoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrSGFzO1xuIiwiLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmcmVlR2xvYmFsO1xuIiwidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxubW9kdWxlLmV4cG9ydHMgPSByb290O1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbDtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFJhd1RhZztcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgdXNpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9iamVjdFRvU3RyaW5nO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGdldFJhd1RhZyA9IHJlcXVpcmUoJy4vX2dldFJhd1RhZycpLFxuICAgIG9iamVjdFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fb2JqZWN0VG9TdHJpbmcnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgfVxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldFRhZztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0O1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGdW5jdGlvbjtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcmVKc0RhdGE7XG4iLCJ2YXIgY29yZUpzRGF0YSA9IHJlcXVpcmUoJy4vX2NvcmVKc0RhdGEnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc01hc2tlZDtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1NvdXJjZTtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNNYXNrZWQgPSByZXF1aXJlKCcuL19pc01hc2tlZCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCBpc01hc2tlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHBhdHRlcm4gPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYXRpdmU7XG4iLCIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRWYWx1ZTtcbiIsInZhciBiYXNlSXNOYXRpdmUgPSByZXF1aXJlKCcuL19iYXNlSXNOYXRpdmUnKSxcbiAgICBnZXRWYWx1ZSA9IHJlcXVpcmUoJy4vX2dldFZhbHVlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TmF0aXZlO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcDtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVDcmVhdGU7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKi9cbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIFRoZSBoYXNoIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gdGhpcy5oYXMoa2V5KSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXldO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaERlbGV0ZTtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hHZXQ7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgaGFzaCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoSGFzO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XG4gIGRhdGFba2V5XSA9IChuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoU2V0O1xuIiwidmFyIGhhc2hDbGVhciA9IHJlcXVpcmUoJy4vX2hhc2hDbGVhcicpLFxuICAgIGhhc2hEZWxldGUgPSByZXF1aXJlKCcuL19oYXNoRGVsZXRlJyksXG4gICAgaGFzaEdldCA9IHJlcXVpcmUoJy4vX2hhc2hHZXQnKSxcbiAgICBoYXNoSGFzID0gcmVxdWlyZSgnLi9faGFzaEhhcycpLFxuICAgIGhhc2hTZXQgPSByZXF1aXJlKCcuL19oYXNoU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEhhc2g7XG4iLCJ2YXIgSGFzaCA9IHJlcXVpcmUoJy4vX0hhc2gnKSxcbiAgICBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlQ2xlYXI7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXlhYmxlO1xuIiwidmFyIGlzS2V5YWJsZSA9IHJlcXVpcmUoJy4vX2lzS2V5YWJsZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWFwRGF0YTtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZURlbGV0ZTtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVHZXQ7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUhhcztcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVTZXQ7XG4iLCJ2YXIgbWFwQ2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX21hcENhY2hlQ2xlYXInKSxcbiAgICBtYXBDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX21hcENhY2hlRGVsZXRlJyksXG4gICAgbWFwQ2FjaGVHZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZUdldCcpLFxuICAgIG1hcENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVIYXMnKSxcbiAgICBtYXBDYWNoZVNldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcENhY2hlO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBTZXRzIHRoZSBzdGFjayBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBzdGFjayBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTGlzdENhY2hlKSB7XG4gICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcbiAgICBpZiAoIU1hcCB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XG4gICAgICBwYWlycy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICB0aGlzLnNpemUgPSArK2RhdGEuc2l6ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZShwYWlycyk7XG4gIH1cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tTZXQ7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgc3RhY2tDbGVhciA9IHJlcXVpcmUoJy4vX3N0YWNrQ2xlYXInKSxcbiAgICBzdGFja0RlbGV0ZSA9IHJlcXVpcmUoJy4vX3N0YWNrRGVsZXRlJyksXG4gICAgc3RhY2tHZXQgPSByZXF1aXJlKCcuL19zdGFja0dldCcpLFxuICAgIHN0YWNrSGFzID0gcmVxdWlyZSgnLi9fc3RhY2tIYXMnKSxcbiAgICBzdGFja1NldCA9IHJlcXVpcmUoJy4vX3N0YWNrU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0YWNrIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFN0YWNrKGVudHJpZXMpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZShlbnRyaWVzKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxuU3RhY2sucHJvdG90eXBlLmNsZWFyID0gc3RhY2tDbGVhcjtcblN0YWNrLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBzdGFja0RlbGV0ZTtcblN0YWNrLnByb3RvdHlwZS5nZXQgPSBzdGFja0dldDtcblN0YWNrLnByb3RvdHlwZS5oYXMgPSBzdGFja0hhcztcblN0YWNrLnByb3RvdHlwZS5zZXQgPSBzdGFja1NldDtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGFjaztcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydHk7XG4iLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gKiB2YWx1ZSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ25WYWx1ZTtcbiIsInZhciBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFzc2lnblZhbHVlYCBleGNlcHQgdGhhdCBpdCBkb2Vzbid0IGFzc2lnblxuICogYHVuZGVmaW5lZGAgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmICgodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZXEob2JqZWN0W2tleV0sIHZhbHVlKSkgfHxcbiAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XG4gICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NpZ25NZXJnZVZhbHVlO1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgYmFzZSBmdW5jdGlvbiBmb3IgbWV0aG9kcyBsaWtlIGBfLmZvckluYCBhbmQgYF8uZm9yT3duYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBiYXNlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVCYXNlRm9yKGZyb21SaWdodCkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBpdGVyYXRlZSwga2V5c0Z1bmMpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgaXRlcmFibGUgPSBPYmplY3Qob2JqZWN0KSxcbiAgICAgICAgcHJvcHMgPSBrZXlzRnVuYyhvYmplY3QpLFxuICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIHZhciBrZXkgPSBwcm9wc1tmcm9tUmlnaHQgPyBsZW5ndGggOiArK2luZGV4XTtcbiAgICAgIGlmIChpdGVyYXRlZShpdGVyYWJsZVtrZXldLCBrZXksIGl0ZXJhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQmFzZUZvcjtcbiIsInZhciBjcmVhdGVCYXNlRm9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQmFzZUZvcicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBiYXNlRm9yT3duYCB3aGljaCBpdGVyYXRlcyBvdmVyIGBvYmplY3RgXG4gKiBwcm9wZXJ0aWVzIHJldHVybmVkIGJ5IGBrZXlzRnVuY2AgYW5kIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xudmFyIGJhc2VGb3IgPSBjcmVhdGVCYXNlRm9yKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZvcjtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgICBhbGxvY1Vuc2FmZSA9IEJ1ZmZlciA/IEJ1ZmZlci5hbGxvY1Vuc2FmZSA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgIGBidWZmZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyIFRoZSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge0J1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gY2xvbmVCdWZmZXIoYnVmZmVyLCBpc0RlZXApIHtcbiAgaWYgKGlzRGVlcCkge1xuICAgIHJldHVybiBidWZmZXIuc2xpY2UoKTtcbiAgfVxuICB2YXIgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IGFsbG9jVW5zYWZlID8gYWxsb2NVbnNhZmUobGVuZ3RoKSA6IG5ldyBidWZmZXIuY29uc3RydWN0b3IobGVuZ3RoKTtcblxuICBidWZmZXIuY29weShyZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lQnVmZmVyO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFVpbnQ4QXJyYXkgPSByb290LlVpbnQ4QXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gVWludDhBcnJheTtcbiIsInZhciBVaW50OEFycmF5ID0gcmVxdWlyZSgnLi9fVWludDhBcnJheScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgYXJyYXlCdWZmZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5QnVmZmVyfSBhcnJheUJ1ZmZlciBUaGUgYXJyYXkgYnVmZmVyIHRvIGNsb25lLlxuICogQHJldHVybnMge0FycmF5QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYXJyYXkgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUFycmF5QnVmZmVyKGFycmF5QnVmZmVyKSB7XG4gIHZhciByZXN1bHQgPSBuZXcgYXJyYXlCdWZmZXIuY29uc3RydWN0b3IoYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCk7XG4gIG5ldyBVaW50OEFycmF5KHJlc3VsdCkuc2V0KG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVBcnJheUJ1ZmZlcjtcbiIsInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgdHlwZWRBcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSB0eXBlZEFycmF5IFRoZSB0eXBlZCBhcnJheSB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgdHlwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNsb25lVHlwZWRBcnJheSh0eXBlZEFycmF5LCBpc0RlZXApIHtcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIodHlwZWRBcnJheS5idWZmZXIpIDogdHlwZWRBcnJheS5idWZmZXI7XG4gIHJldHVybiBuZXcgdHlwZWRBcnJheS5jb25zdHJ1Y3RvcihidWZmZXIsIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5sZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lVHlwZWRBcnJheTtcbiIsIi8qKlxuICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5PVtdXSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgdG8uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gY29weUFycmF5KHNvdXJjZSwgYXJyYXkpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuXG4gIGFycmF5IHx8IChhcnJheSA9IEFycmF5KGxlbmd0aCkpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlBcnJheTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jcmVhdGVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYXNzaWduaW5nXG4gKiBwcm9wZXJ0aWVzIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqL1xudmFyIGJhc2VDcmVhdGUgPSAoZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIG9iamVjdCgpIHt9XG4gIHJldHVybiBmdW5jdGlvbihwcm90bykge1xuICAgIGlmICghaXNPYmplY3QocHJvdG8pKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGlmIChvYmplY3RDcmVhdGUpIHtcbiAgICAgIHJldHVybiBvYmplY3RDcmVhdGUocHJvdG8pO1xuICAgIH1cbiAgICBvYmplY3QucHJvdG90eXBlID0gcHJvdG87XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBvYmplY3Q7XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQ3JlYXRlO1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3ZlckFyZztcbiIsInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBnZXRQcm90b3R5cGUgPSBvdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRQcm90b3R5cGU7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQcm90b3R5cGU7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xuICByZXR1cm4gKHR5cGVvZiBvYmplY3QuY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNQcm90b3R5cGUob2JqZWN0KSlcbiAgICA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpXG4gICAgOiB7fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVPYmplY3Q7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBhcmdzVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0FyZ3VtZW50cztcbiIsInZhciBiYXNlSXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL19iYXNlSXNBcmd1bWVudHMnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhbiBgYXJndW1lbnRzYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcmd1bWVudHMgPSBiYXNlSXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPyBiYXNlSXNBcmd1bWVudHMgOiBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnY2FsbGVlJykgJiZcbiAgICAhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0FyZ3VtZW50cztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXk7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNMZW5ndGg7XG4iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZTtcbiIsInZhciBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNBcnJheUxpa2VgIGV4Y2VwdCB0aGF0IGl0IGFsc28gY2hlY2tzIGlmIGB2YWx1ZWBcbiAqIGlzIGFuIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheS1saWtlIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZU9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBpc0FycmF5TGlrZSh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheUxpa2VPYmplY3Q7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkZhbHNlO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290JyksXG4gICAgc3R1YkZhbHNlID0gcmVxdWlyZSgnLi9zdHViRmFsc2UnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVJc0J1ZmZlciA9IEJ1ZmZlciA/IEJ1ZmZlci5pc0J1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIoMikpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IFVpbnQ4QXJyYXkoMikpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQnVmZmVyO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gaW5mZXIgdGhlIGBPYmplY3RgIGNvbnN0cnVjdG9yLiAqL1xudmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGF0IGlzLCBhbiBvYmplY3QgY3JlYXRlZCBieSB0aGVcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuOC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiB9XG4gKlxuICogXy5pc1BsYWluT2JqZWN0KG5ldyBGb28pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSB8fCBiYXNlR2V0VGFnKHZhbHVlKSAhPSBvYmplY3RUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHByb3RvID0gZ2V0UHJvdG90eXBlKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIEN0b3IgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCAnY29uc3RydWN0b3InKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiZcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUGxhaW5PYmplY3Q7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXG52YXIgdHlwZWRBcnJheVRhZ3MgPSB7fTtcbnR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDhUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xudHlwZWRBcnJheVRhZ3NbYXJnc1RhZ10gPSB0eXBlZEFycmF5VGFnc1thcnJheVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZXJyb3JUYWddID0gdHlwZWRBcnJheVRhZ3NbZnVuY1RhZ10gPVxudHlwZWRBcnJheVRhZ3NbbWFwVGFnXSA9IHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbc2V0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3N0cmluZ1RhZ10gPVxudHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1R5cGVkQXJyYXlgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJlxuICAgIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tiYXNlR2V0VGFnKHZhbHVlKV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzVHlwZWRBcnJheTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5hcnk7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlUHJvY2VzcyA9IG1vZHVsZUV4cG9ydHMgJiYgZnJlZUdsb2JhbC5wcm9jZXNzO1xuXG4vKiogVXNlZCB0byBhY2Nlc3MgZmFzdGVyIE5vZGUuanMgaGVscGVycy4gKi9cbnZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICAvLyBVc2UgYHV0aWwudHlwZXNgIGZvciBOb2RlLmpzIDEwKy5cbiAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWlyZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztcblxuICAgIGlmICh0eXBlcykge1xuICAgICAgcmV0dXJuIHR5cGVzO1xuICAgIH1cblxuICAgIC8vIExlZ2FjeSBgcHJvY2Vzcy5iaW5kaW5nKCd1dGlsJylgIGZvciBOb2RlLmpzIDwgMTAuXG4gICAgcmV0dXJuIGZyZWVQcm9jZXNzICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcgJiYgZnJlZVByb2Nlc3MuYmluZGluZygndXRpbCcpO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBub2RlVXRpbDtcbiIsInZhciBiYXNlSXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fYmFzZUlzVHlwZWRBcnJheScpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNUeXBlZEFycmF5O1xuIiwiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCwgdW5sZXNzIGBrZXlgIGlzIFwiX19wcm90b19fXCIgb3IgXCJjb25zdHJ1Y3RvclwiLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc2FmZUdldChvYmplY3QsIGtleSkge1xuICBpZiAoa2V5ID09PSAnY29uc3RydWN0b3InICYmIHR5cGVvZiBvYmplY3Rba2V5XSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gb2JqZWN0W2tleV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2FmZUdldDtcbiIsInZhciBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBc3NpZ25zIGB2YWx1ZWAgdG8gYGtleWAgb2YgYG9iamVjdGAgaWYgdGhlIGV4aXN0aW5nIHZhbHVlIGlzIG5vdCBlcXVpdmFsZW50XG4gKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XTtcbiAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgZXEob2JqVmFsdWUsIHZhbHVlKSkgfHxcbiAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XG4gICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NpZ25WYWx1ZTtcbiIsInZhciBhc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Fzc2lnblZhbHVlJyksXG4gICAgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyk7XG5cbi8qKlxuICogQ29waWVzIHByb3BlcnRpZXMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycyB0byBjb3B5LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29waWVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlPYmplY3Qoc291cmNlLCBwcm9wcywgb2JqZWN0LCBjdXN0b21pemVyKSB7XG4gIHZhciBpc05ldyA9ICFvYmplY3Q7XG4gIG9iamVjdCB8fCAob2JqZWN0ID0ge30pO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHByb3BzW2luZGV4XTtcblxuICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICAgID8gY3VzdG9taXplcihvYmplY3Rba2V5XSwgc291cmNlW2tleV0sIGtleSwgb2JqZWN0LCBzb3VyY2UpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXdWYWx1ZSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgICBpZiAoaXNOZXcpIHtcbiAgICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlPYmplY3Q7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUaW1lcztcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG52YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuXG4gIHJldHVybiAhIWxlbmd0aCAmJlxuICAgICh0eXBlID09ICdudW1iZXInIHx8XG4gICAgICAodHlwZSAhPSAnc3ltYm9sJyAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkpICYmXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0luZGV4O1xuIiwidmFyIGJhc2VUaW1lcyA9IHJlcXVpcmUoJy4vX2Jhc2VUaW1lcycpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUxpa2VLZXlzO1xuIiwiLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VcbiAqIFtgT2JqZWN0LmtleXNgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGV4Y2VwdCB0aGF0IGl0IGluY2x1ZGVzIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnRpZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIG5hdGl2ZUtleXNJbihvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBpZiAob2JqZWN0ICE9IG51bGwpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlS2V5c0luO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzSW4gPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzSW4nKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXNJbihvYmplY3QpO1xuICB9XG4gIHZhciBpc1Byb3RvID0gaXNQcm90b3R5cGUob2JqZWN0KSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5c0luO1xuIiwidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXNJbiA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzSW4nKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5c0luKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCwgdHJ1ZSkgOiBiYXNlS2V5c0luKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c0luO1xuIiwidmFyIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgcGxhaW4gb2JqZWN0IGZsYXR0ZW5pbmcgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nXG4gKiBrZXllZCBwcm9wZXJ0aWVzIG9mIGB2YWx1ZWAgdG8gb3duIHByb3BlcnRpZXMgb2YgdGhlIHBsYWluIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBwbGFpbiBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8uYXNzaWduKHsgJ2EnOiAxIH0sIG5ldyBGb28pO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gKlxuICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgXy50b1BsYWluT2JqZWN0KG5ldyBGb28pKTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMyB9XG4gKi9cbmZ1bmN0aW9uIHRvUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGNvcHlPYmplY3QodmFsdWUsIGtleXNJbih2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvUGxhaW5PYmplY3Q7XG4iLCJ2YXIgYXNzaWduTWVyZ2VWYWx1ZSA9IHJlcXVpcmUoJy4vX2Fzc2lnbk1lcmdlVmFsdWUnKSxcbiAgICBjbG9uZUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQnVmZmVyJyksXG4gICAgY2xvbmVUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fY2xvbmVUeXBlZEFycmF5JyksXG4gICAgY29weUFycmF5ID0gcmVxdWlyZSgnLi9fY29weUFycmF5JyksXG4gICAgaW5pdENsb25lT2JqZWN0ID0gcmVxdWlyZSgnLi9faW5pdENsb25lT2JqZWN0JyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQXJyYXlMaWtlT2JqZWN0ID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZU9iamVjdCcpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1BsYWluT2JqZWN0ID0gcmVxdWlyZSgnLi9pc1BsYWluT2JqZWN0JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKSxcbiAgICBzYWZlR2V0ID0gcmVxdWlyZSgnLi9fc2FmZUdldCcpLFxuICAgIHRvUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuL3RvUGxhaW5PYmplY3QnKTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VNZXJnZWAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xuICogZGVlcCBtZXJnZXMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcbiAqIHJlZmVyZW5jZXMgdG8gYmUgbWVyZ2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBtZXJnZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXJnZUZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1lcmdlIHZhbHVlcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXG4gKiAgY291bnRlcnBhcnRzLlxuICovXG5mdW5jdGlvbiBiYXNlTWVyZ2VEZWVwKG9iamVjdCwgc291cmNlLCBrZXksIHNyY0luZGV4LCBtZXJnZUZ1bmMsIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gIHZhciBvYmpWYWx1ZSA9IHNhZmVHZXQob2JqZWN0LCBrZXkpLFxuICAgICAgc3JjVmFsdWUgPSBzYWZlR2V0KHNvdXJjZSwga2V5KSxcbiAgICAgIHN0YWNrZWQgPSBzdGFjay5nZXQoc3JjVmFsdWUpO1xuXG4gIGlmIChzdGFja2VkKSB7XG4gICAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgc3RhY2tlZCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCAoa2V5ICsgJycpLCBvYmplY3QsIHNvdXJjZSwgc3RhY2spXG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgdmFyIGlzQ29tbW9uID0gbmV3VmFsdWUgPT09IHVuZGVmaW5lZDtcblxuICBpZiAoaXNDb21tb24pIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KHNyY1ZhbHVlKSxcbiAgICAgICAgaXNCdWZmID0gIWlzQXJyICYmIGlzQnVmZmVyKHNyY1ZhbHVlKSxcbiAgICAgICAgaXNUeXBlZCA9ICFpc0FyciAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheShzcmNWYWx1ZSk7XG5cbiAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xuICAgIGlmIChpc0FyciB8fCBpc0J1ZmYgfHwgaXNUeXBlZCkge1xuICAgICAgaWYgKGlzQXJyYXkob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc0FycmF5TGlrZU9iamVjdChvYmpWYWx1ZSkpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBjb3B5QXJyYXkob2JqVmFsdWUpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaXNCdWZmKSB7XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgIG5ld1ZhbHVlID0gY2xvbmVCdWZmZXIoc3JjVmFsdWUsIHRydWUpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaXNUeXBlZCkge1xuICAgICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgICAgICBuZXdWYWx1ZSA9IGNsb25lVHlwZWRBcnJheShzcmNWYWx1ZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgbmV3VmFsdWUgPSBbXTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoaXNQbGFpbk9iamVjdChzcmNWYWx1ZSkgfHwgaXNBcmd1bWVudHMoc3JjVmFsdWUpKSB7XG4gICAgICBuZXdWYWx1ZSA9IG9ialZhbHVlO1xuICAgICAgaWYgKGlzQXJndW1lbnRzKG9ialZhbHVlKSkge1xuICAgICAgICBuZXdWYWx1ZSA9IHRvUGxhaW5PYmplY3Qob2JqVmFsdWUpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoIWlzT2JqZWN0KG9ialZhbHVlKSB8fCBpc0Z1bmN0aW9uKG9ialZhbHVlKSkge1xuICAgICAgICBuZXdWYWx1ZSA9IGluaXRDbG9uZU9iamVjdChzcmNWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzQ29tbW9uKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgbWVyZ2Ugb2JqZWN0cyBhbmQgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgc3RhY2suc2V0KHNyY1ZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgbWVyZ2VGdW5jKG5ld1ZhbHVlLCBzcmNWYWx1ZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICBzdGFja1snZGVsZXRlJ10oc3JjVmFsdWUpO1xuICB9XG4gIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTWVyZ2VEZWVwO1xuIiwidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBhc3NpZ25NZXJnZVZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduTWVyZ2VWYWx1ZScpLFxuICAgIGJhc2VGb3IgPSByZXF1aXJlKCcuL19iYXNlRm9yJyksXG4gICAgYmFzZU1lcmdlRGVlcCA9IHJlcXVpcmUoJy4vX2Jhc2VNZXJnZURlZXAnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpLFxuICAgIHNhZmVHZXQgPSByZXF1aXJlKCcuL19zYWZlR2V0Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWVyZ2VgIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBtZXJnZWQgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAqICBjb3VudGVycGFydHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gIGlmIChvYmplY3QgPT09IHNvdXJjZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBiYXNlRm9yKHNvdXJjZSwgZnVuY3Rpb24oc3JjVmFsdWUsIGtleSkge1xuICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgaWYgKGlzT2JqZWN0KHNyY1ZhbHVlKSkge1xuICAgICAgYmFzZU1lcmdlRGVlcChvYmplY3QsIHNvdXJjZSwga2V5LCBzcmNJbmRleCwgYmFzZU1lcmdlLCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgICA/IGN1c3RvbWl6ZXIoc2FmZUdldChvYmplY3QsIGtleSksIHNyY1ZhbHVlLCAoa2V5ICsgJycpLCBvYmplY3QsIHNvdXJjZSwgc3RhY2spXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xuICAgICAgfVxuICAgICAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgfSwga2V5c0luKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTWVyZ2U7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICpcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlkZW50aXR5O1xuIiwiLyoqXG4gKiBBIGZhc3RlciBhbHRlcm5hdGl2ZSB0byBgRnVuY3Rpb24jYXBwbHlgLCB0aGlzIGZ1bmN0aW9uIGludm9rZXMgYGZ1bmNgXG4gKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2AgYW5kIHRoZSBhcmd1bWVudHMgb2YgYGFyZ3NgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBmdW5jYC5cbiAqL1xuZnVuY3Rpb24gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncykge1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICB9XG4gIHJldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFwcGx5O1xuIiwidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIHJlc3QgYXJyYXkgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCB0cmFuc2Zvcm0pIHtcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XG4gICAgfVxuICAgIGluZGV4ID0gLTE7XG4gICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgb3RoZXJBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdO1xuICAgIH1cbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcbiAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyUmVzdDtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnN0YW50O1xuIiwidmFyIGNvbnN0YW50ID0gcmVxdWlyZSgnLi9jb25zdGFudCcpLFxuICAgIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fZGVmaW5lUHJvcGVydHknKSxcbiAgICBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsICd0b1N0cmluZycsIHtcbiAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICd2YWx1ZSc6IGNvbnN0YW50KHN0cmluZyksXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNldFRvU3RyaW5nO1xuIiwiLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xudmFyIEhPVF9DT1VOVCA9IDgwMCxcbiAgICBIT1RfU1BBTiA9IDE2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQnbGwgc2hvcnQgb3V0IGFuZCBpbnZva2UgYGlkZW50aXR5YCBpbnN0ZWFkXG4gKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcbiAqIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzaG9ydGFibGUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcbiAgdmFyIGNvdW50ID0gMCxcbiAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhbXAgPSBuYXRpdmVOb3coKSxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcblxuICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgaWYgKCsrY291bnQgPj0gSE9UX0NPVU5UKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3J0T3V0O1xuIiwidmFyIGJhc2VTZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX2Jhc2VTZXRUb1N0cmluZycpLFxuICAgIHNob3J0T3V0ID0gcmVxdWlyZSgnLi9fc2hvcnRPdXQnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgZnVuY2AgdG8gcmV0dXJuIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIHNldFRvU3RyaW5nID0gc2hvcnRPdXQoYmFzZVNldFRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb1N0cmluZztcbiIsInZhciBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKSxcbiAgICBvdmVyUmVzdCA9IHJlcXVpcmUoJy4vX292ZXJSZXN0JyksXG4gICAgc2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRUb1N0cmluZycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlc3RgIHdoaWNoIGRvZXNuJ3QgdmFsaWRhdGUgb3IgY29lcmNlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUmVzdChmdW5jLCBzdGFydCkge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgc3RhcnQsIGlkZW50aXR5KSwgZnVuYyArICcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlUmVzdDtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gIGlmICh0eXBlID09ICdudW1iZXInXG4gICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgKSB7XG4gICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJdGVyYXRlZUNhbGw7XG4iLCJ2YXIgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGlzSXRlcmF0ZWVDYWxsID0gcmVxdWlyZSgnLi9faXNJdGVyYXRlZUNhbGwnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5hc3NpZ25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBhc3NpZ25lciBUaGUgZnVuY3Rpb24gdG8gYXNzaWduIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFzc2lnbmVyIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVBc3NpZ25lcihhc3NpZ25lcikge1xuICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoLFxuICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoID4gMSA/IHNvdXJjZXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQsXG4gICAgICAgIGd1YXJkID0gbGVuZ3RoID4gMiA/IHNvdXJjZXNbMl0gOiB1bmRlZmluZWQ7XG5cbiAgICBjdXN0b21pemVyID0gKGFzc2lnbmVyLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJylcbiAgICAgID8gKGxlbmd0aC0tLCBjdXN0b21pemVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XG4gICAgICBjdXN0b21pemVyID0gbGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XG4gICAgICBsZW5ndGggPSAxO1xuICAgIH1cbiAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICBhc3NpZ25lcihvYmplY3QsIHNvdXJjZSwgaW5kZXgsIGN1c3RvbWl6ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVBc3NpZ25lcjtcbiIsInZhciBiYXNlTWVyZ2UgPSByZXF1aXJlKCcuL19iYXNlTWVyZ2UnKSxcbiAgICBjcmVhdGVBc3NpZ25lciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUFzc2lnbmVyJyk7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25gIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IG1lcmdlcyBvd24gYW5kXG4gKiBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2Ugb2JqZWN0cyBpbnRvIHRoZVxuICogZGVzdGluYXRpb24gb2JqZWN0LiBTb3VyY2UgcHJvcGVydGllcyB0aGF0IHJlc29sdmUgdG8gYHVuZGVmaW5lZGAgYXJlXG4gKiBza2lwcGVkIGlmIGEgZGVzdGluYXRpb24gdmFsdWUgZXhpc3RzLiBBcnJheSBhbmQgcGxhaW4gb2JqZWN0IHByb3BlcnRpZXNcbiAqIGFyZSBtZXJnZWQgcmVjdXJzaXZlbHkuIE90aGVyIG9iamVjdHMgYW5kIHZhbHVlIHR5cGVzIGFyZSBvdmVycmlkZGVuIGJ5XG4gKiBhc3NpZ25tZW50LiBTb3VyY2Ugb2JqZWN0cyBhcmUgYXBwbGllZCBmcm9tIGxlZnQgdG8gcmlnaHQuIFN1YnNlcXVlbnRcbiAqIHNvdXJjZXMgb3ZlcndyaXRlIHByb3BlcnR5IGFzc2lnbm1lbnRzIG9mIHByZXZpb3VzIHNvdXJjZXMuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjUuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0ge1xuICogICAnYSc6IFt7ICdiJzogMiB9LCB7ICdkJzogNCB9XVxuICogfTtcbiAqXG4gKiB2YXIgb3RoZXIgPSB7XG4gKiAgICdhJzogW3sgJ2MnOiAzIH0sIHsgJ2UnOiA1IH1dXG4gKiB9O1xuICpcbiAqIF8ubWVyZ2Uob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiB7ICdhJzogW3sgJ2InOiAyLCAnYyc6IDMgfSwgeyAnZCc6IDQsICdlJzogNSB9XSB9XG4gKi9cbnZhciBtZXJnZSA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCkge1xuICBiYXNlTWVyZ2Uob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmdlO1xuIiwiXG5pbnRlcmZhY2UgSW5qZWN0TGlua09wdGlvbnMge1xuICByZWw6IHN0cmluZ1xuICBocmVmOiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IGluamVjdExpbmsgPShvcHRpb25zOiBJbmplY3RMaW5rT3B0aW9ucykgPT4ge1xuICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKVxuXG4gIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4gbGluay5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSkpXG5cbiAgaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcbn1cbiIsImltcG9ydCB7IENhbGxiYWNrIH0gZnJvbSAnLi90eXBlcydcblxudHlwZSBWaXNpdG9yID0gQ2FsbGJhY2s8W1Byb3BlcnR5S2V5LCB1bmtub3duXT5cblxuZXhwb3J0IGNvbnN0IGl0ZXJhdG9yID0gKGlucHV0OiB1bmtub3duLCB2aXNpdG9yOiBWaXNpdG9yKTogYW55ID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgcmV0dXJuIGlucHV0Lm1hcCgoZWwsIGluZGV4KSA9PiBpdGVyYXRvcih2aXNpdG9yKGluZGV4LCBlbCksIHZpc2l0b3IpKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgaW5wdXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoaW5wdXQpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGFjY1trZXldID0gaXRlcmF0b3IodmlzaXRvcihrZXksIHZhbHVlKSwgdmlzaXRvcilcblxuICAgICAgcmV0dXJuIGFjY1xuICAgIH0sIHt9IGFzIGFueSlcbiAgfVxuXG4gIHJldHVybiBpbnB1dFxufVxuIiwiaW1wb3J0IHsgQW55T2JqZWN0IH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCBsb2Rhc2hNZXJnZSBmcm9tICdsb2Rhc2gvbWVyZ2UnXG5cbmV4cG9ydCBjb25zdCBpc0VtcHR5VmFsdWUgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBudWxsIHwgdW5kZWZpbmVkID0+XG4gICF2YWx1ZSAmJiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZClcbmV4cG9ydCBjb25zdCBpc1ZhbHVlID0gPFQ+KHZhbHVlOiBUKTogdmFsdWUgaXMgRXhjbHVkZTxULCBudWxsIHwgdW5kZWZpbmVkPiA9PiAhaXNFbXB0eVZhbHVlKHZhbHVlKVxuZXhwb3J0IGNvbnN0IG5vb3AgPSAoKSA9PiB1bmRlZmluZWRcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNvbnN0YW50cyA9IDxLIGV4dGVuZHMgc3RyaW5nPiguLi5jb25zdGFudHM6IEtbXSkgPT4ge1xuICByZXR1cm4gY29uc3RhbnRzLnJlZHVjZTx7IFtQIGluIEtdOiBQIH0+KChhY2MsIGNvbnN0YW50KSA9PiB7XG4gICAgYWNjW2NvbnN0YW50XSA9IGNvbnN0YW50XG4gICAgcmV0dXJuIGFjY1xuICB9LCB7fSBhcyB7IFtQIGluIEtdOiBQIH0pXG59XG5cbmV4cG9ydCBjb25zdCBwaWNrID0gPFRWYWx1ZSBleHRlbmRzIEFueU9iamVjdD4ob2JqOiBUVmFsdWUsIC4uLnByb3BzOiAoa2V5b2YgVFZhbHVlKVtdKSA9PiB7XG4gIHJldHVybiBwcm9wcy5yZWR1Y2UoKHJlc3VsdCwgcHJvcCkgPT4ge1xuICAgIHJlc3VsdFtwcm9wXSA9IG9ialtwcm9wXVxuICAgIHJldHVybiByZXN1bHRcbiAgfSwge30gYXMgYW55KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb21pdDxUIGV4dGVuZHMgQW55T2JqZWN0LCBQIGV4dGVuZHMgc3RyaW5nW10+KG9iajogVCwgLi4ucHJvcHM6IFApOiBPbWl0PFQsIFBbbnVtYmVyXT4ge1xuICBjb25zdCByZXN1bHQgPSB7IC4uLm9iaiB9XG4gIHByb3BzLmZvckVhY2gocHJvcCA9PiB7XG4gICAgZGVsZXRlIHJlc3VsdFtwcm9wXVxuICB9KVxuICByZXR1cm4gcmVzdWx0XG59XG5cbmV4cG9ydCBjb25zdCBnZXQgPSAob2JqOiBBbnlPYmplY3QsIHBhdGg6IHN0cmluZywgZGVmVmFsdWU/OiB1bmtub3duKTogYW55ID0+IHtcbiAgaWYgKCFwYXRoKSByZXR1cm4gdW5kZWZpbmVkXG4gIGNvbnN0IHBhdGhBcnJheSA9IChBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aCA6IHBhdGgubWF0Y2goLyhbXlsuXFxdXSkrL2cpKSBhcyBzdHJpbmdbXVxuICBjb25zdCByZXN1bHQgPSBwYXRoQXJyYXkucmVkdWNlKChwcmV2T2JqOiBBbnlPYmplY3QsIGtleTogc3RyaW5nKSA9PiBwcmV2T2JqICYmIHByZXZPYmpba2V5XSwgb2JqKVxuICAvLyBJZiBmb3VuZCB2YWx1ZSBpcyB1bmRlZmluZWQgcmV0dXJuIGRlZmF1bHQgdmFsdWU7IG90aGVyd2lzZSByZXR1cm4gdGhlIHZhbHVlXG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZlZhbHVlIDogcmVzdWx0XG59XG5cbmV4cG9ydCBjb25zdCBzZXQgPSAob2JqOiBBbnlPYmplY3QsIHBhdGg6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IHtcbiAgY29uc3QgcGF0aEFycmF5ID0gKEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoIDogcGF0aC5tYXRjaCgvKFteWy5cXF1dKSsvZykpIGFzIHN0cmluZ1tdXG5cbiAgcmV0dXJuIHBhdGhBcnJheS5yZWR1Y2UoKGFjYywga2V5LCBpKSA9PiB7XG4gICAgaWYgKGFjY1trZXldID09PSB1bmRlZmluZWQpIGFjY1trZXldID0ge31cbiAgICBpZiAoaSA9PT0gcGF0aEFycmF5Lmxlbmd0aCAtIDEpIGFjY1trZXldID0gdmFsdWVcbiAgICByZXR1cm4gYWNjW2tleV1cbiAgfSwgb2JqKVxufVxuXG5leHBvcnQgY29uc3QgaGV4VG9SZ2IgPSAoaGV4OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgY2hhcnMgPSBoZXguc2xpY2UoMSlcblxuICBpZiAoY2hhcnMubGVuZ3RoID09PSAzKSB7XG4gICAgaGV4ID0gY2hhcnNcbiAgICAgIC5zcGxpdCgnJylcbiAgICAgIC5tYXAodmFsID0+IGAke3ZhbH0ke3ZhbH1gKVxuICAgICAgLmpvaW4oJycpXG4gIH1cblxuICBjb25zdCByZXN1bHQgPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pLmV4ZWMoaGV4KVxuXG4gIHJldHVybiByZXN1bHRcbiAgICA/IHtcbiAgICAgICAgcjogcGFyc2VJbnQocmVzdWx0WzFdLCAxNiksXG4gICAgICAgIGc6IHBhcnNlSW50KHJlc3VsdFsyXSwgMTYpLFxuICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10sIDE2KVxuICAgICAgfVxuICAgIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBjb25zdCBpc0pzb25TYW1lID0gKC4uLnZhbHVlczogdW5rbm93bltdKSA9PiB7XG4gIHJldHVybiB2YWx1ZXMubWFwKHZhbHVlID0+IEpTT04uc3RyaW5naWZ5KHZhbHVlKSkuZXZlcnkoKHZhbCwgXywgYXJyKSA9PiB2YWwgPT09IGFyclswXSlcbn1cblxuZXhwb3J0IGNvbnN0IHJnYlRvUmdiYSA9IChyZ2I6IHN0cmluZywgYWxwaGEgPSAxKTogc3RyaW5nID0+IHJnYi5yZXBsYWNlKCcpJywgYCwgJHthbHBoYX0pYCkucmVwbGFjZSgncmdiJywgJ3JnYmEnKVxuXG5leHBvcnQgY29uc3QgbWVyZ2UgPSBsb2Rhc2hNZXJnZVxuXG5leHBvcnQgY29uc3QgZGV2aWNlcyA9IFsnZGVza3RvcCcsICdsYXB0b3AnLCAndGFibGV0JywgJ21vYmlsZSddIGFzIGNvbnN0XG5cbmV4cG9ydCBjb25zdCBCUkVBS1BPSU5UUyA9IHtcbiAgbW9iaWxlOiAzMjAsXG4gIHRhYmxldDogNzY4LFxuICBsYXB0b3A6IDEwMjQsXG4gIGRlc2t0b3A6IDE5MjBcbn0gYXMgY29uc3RcblxuZXhwb3J0ICogZnJvbSAnLi90eXBlcydcbmV4cG9ydCAqIGZyb20gJy4vZG9tJ1xuZXhwb3J0ICogZnJvbSAnLi9pdGVyYXRvcidcbiIsImltcG9ydCB7IEFueU9iamVjdCwgRGV2aWNlLCBkZXZpY2VzLCBFeHRyYWN0UnVsZXMsIGlzVmFsdWUsIGl0ZXJhdG9yLCBMYXllciwgUnVsZSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgQW55U3RhdGUgfSBmcm9tICcuLi9wcm9tb3MvU2ltcGxlR2lmdC90eXBlcydcblxuY29uc3QgaXNWYWxpZExheWVyID0gKHN0YXRlOiBBbnlPYmplY3QgPSB7fSk6IHN0YXRlIGlzIExheWVyID0+XG4gIHR5cGVvZiBzdGF0ZSA9PT0gJ29iamVjdCcgJiYgaXNWYWx1ZShzdGF0ZSkgJiYgZGV2aWNlcy5ldmVyeShkZXZpY2UgPT4gZGV2aWNlIGluIHN0YXRlKVxuXG5leHBvcnQgY29uc3QgZ2V0UnVsZXMgPSA8VFN0YXRlIGV4dGVuZHMgQW55U3RhdGUsIFREZXZpY2UgZXh0ZW5kcyBEZXZpY2UgPSAnZGVza3RvcCc+KFxuICBzdGF0ZTogVFN0YXRlLFxuICBkZXZpY2U6IFREZXZpY2Vcbik6IEV4dHJhY3RSdWxlczxUU3RhdGUsIFREZXZpY2U+ID0+IHtcbiAgaWYgKCFzdGF0ZSkgcmV0dXJuIHN0YXRlXG5cbiAgcmV0dXJuIGl0ZXJhdG9yKHN0YXRlLCAoX2tleSwgdmFsdWU6IGFueSkgPT4ge1xuICAgIGlmIChpc1ZhbGlkTGF5ZXIodmFsdWUpKSB7XG4gICAgICBjb25zdCByZXN1bHRSdWxlcyA9IHZhbHVlW2RldmljZV1cbiAgICAgIGlmICgncGFyZW50JyBpbiByZXN1bHRSdWxlcyAmJiBpc1ZhbHVlKHJlc3VsdFJ1bGVzLnBhcmVudCkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlW3Jlc3VsdFJ1bGVzLnBhcmVudF1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHRSdWxlc1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZVxuICB9KSBhcyBFeHRyYWN0UnVsZXM8VFN0YXRlLCBURGV2aWNlPlxufVxuIiwiaW1wb3J0IHsgRGV2aWNlIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyBnZXRSdWxlcyB9IGZyb20gJy4uL2hlbHBlcnMvZ2V0RGV2aWNlU3RhdGUnXG5pbXBvcnQgeyBBbnlTdGF0ZSB9IGZyb20gJy4uL3Byb21vcy9TaW1wbGVHaWZ0L3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgdXNlR2V0UnVsZXMgPSA8VFN0YXRlIGV4dGVuZHMgQW55U3RhdGUsIFREZXZpY2UgZXh0ZW5kcyBEZXZpY2U+KHN0YXRlOiBUU3RhdGUsIGRldmljZTogVERldmljZSkgPT5cbiAgZ2V0UnVsZXM8VFN0YXRlLCBURGV2aWNlPihzdGF0ZSwgZGV2aWNlKVxuIiwiaW1wb3J0IHsgQlJFQUtQT0lOVFMsIERldmljZSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgdXNlTGF5b3V0RWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgeyBNdXRhYmxlUmVmIH0gZnJvbSAncHJlYWN0L2hvb2tzJ1xuXG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gIHRhcmdldFJlZjogTXV0YWJsZVJlZjxIVE1MRGl2RWxlbWVudD5cbiAgLyoqXG4gICAqIFByb21vINCy0YHRgtGA0LDQuNCy0LDQtdGC0YHRjyDQsiDRgNCw0LfQvdGL0LUgRE9NINC4INC80Ysg0L3QtSDQt9C90LDQtdC8INGA0LDQt9C80LXRgCDQutCw0LrQvtCz0L4g0LrQvtC90YLQtdC50L3QtdGA0LBcbiAgICog0Y/QstC70Y/QtdGC0YHRjyDQvdGD0LbQvdGL0LwuINCd0LDQv9GA0LjQvNC10YAgR2lmdCog0LfQsNC90LjQvNCw0LXRgiDQstGB0LXQs9C+IDMwcHgsINC4INC90LXQvtCx0YXQvtC00LjQvNGL0Lkg0LrQvtC90YLQtdC50L3QtdGAXG4gICAqINC80L7QttC10YIg0L3QsNGF0L7QtNC40YLRjNGB0Y8g0LPQvtGA0LDQt9C00L4g0LLRi9GI0LUuXG4gICAqL1xuICBwYXJlbnRLZXk/OiBzdHJpbmdcbiAgYnJlYWtwb2ludHM/OiB0eXBlb2YgQlJFQUtQT0lOVFNcbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNvbnRhaW5lckRldmljZSA9ICh7XG4gIHRhcmdldFJlZixcbiAgcGFyZW50S2V5ID0gJ2RldmljZS1jb250YWluZXInLFxuICBicmVha3BvaW50cyA9IEJSRUFLUE9JTlRTXG59OiBPcHRpb25zKSA9PiB7XG4gIGNvbnN0IFtkZXZpY2UsIHNldERldmljZV0gPSB1c2VTdGF0ZTxEZXZpY2U+KCdkZXNrdG9wJylcblxuICBjb25zdCBjaGVja0RldmljZSA9IChwYXJlbnQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgcGFyZW50V2lkdGggPSBwYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggfHwgMFxuICAgIGNvbnN0IHNvcnRlZEJyZWFrcG9pbnRzID0gT2JqZWN0LmVudHJpZXMoeyAuLi5icmVha3BvaW50cyB9KS5zb3J0KChbXzEsIHZhbHVlQV0sIFtfMiwgdmFsdWVCXSkgPT4gdmFsdWVBIC0gdmFsdWVCKVxuXG4gICAgY29uc3QgZmluZERldmljZSA9XG4gICAgICAoc29ydGVkQnJlYWtwb2ludHMuZmluZCgoW18xLCB2YWx1ZV0sIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IFtfMiwgbmV4dFZhbHVlXSA9IHNvcnRlZEJyZWFrcG9pbnRzW2luZGV4ICsgMV0gfHwgW11cblxuICAgICAgICByZXR1cm4gcGFyZW50V2lkdGggPj0gdmFsdWUgJiYgcGFyZW50V2lkdGggPCBuZXh0VmFsdWVcbiAgICAgIH0pPy5bMF0gYXMgRGV2aWNlKSB8fCAnZGVza3RvcCdcblxuICAgIHNldERldmljZShmaW5kRGV2aWNlKVxuICB9XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gdGFyZ2V0UmVmLmN1cnJlbnQuY2xvc2VzdChgW2RhdGEtJHtwYXJlbnRLZXl9XWApXG5cbiAgICBpZiAocGFyZW50RWxlbWVudCkge1xuICAgICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gY2hlY2tEZXZpY2UocGFyZW50RWxlbWVudCkpXG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKHBhcmVudEVsZW1lbnQpXG5cbiAgICAgIGNoZWNrRGV2aWNlKHBhcmVudEVsZW1lbnQpXG4gICAgfVxuICB9LCBbXSlcblxuICByZXR1cm4gZGV2aWNlXG59XG4iLCJpbXBvcnQgeyBBbnlPYmplY3QsIGRldmljZXMsIEZpdE9wdGlvbiwgaGV4VG9SZ2IsIGlzRW1wdHlWYWx1ZSwgaXNWYWx1ZSwgcmdiVG9SZ2JhIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyBFbWl0dGVyVHlwZSB9IGZyb20gJ3NyYy9yZW5kZXJEcml2ZXInXG5pbXBvcnQgeyBpbmplY3RTdHlsZVJ1bGVzLCBTdHlsZVJ1bGVzIH0gZnJvbSAnc3JjL3V0aWxzL2luamVjdFN0eWxlUnVsZXMnXG5pbXBvcnQgeyBpc1ZhbGlkU3R5bGVLZXkgfSBmcm9tICcuL2lzVmFsaWRTdHlsZUtleSdcblxuLyoqXG4gKiDQn9C70LDQs9C40L0g0L/RgNC40LzQtdC90Y/QtdGCINC/0YDQsNCy0LjQu9CwOiDRgdGC0LjQu9C4LCBpbm5lclRleHQgLi4uXG4gKiDQldGB0LvQuCDQutC+0L3RgtC10L3RgtCwINC90LXRgiwg0YLQviDQndC+0LTQsCDRgdC60YDRi9Cy0LDQtdGC0YHRj1xuICovXG5cbnR5cGUgQ3VzdG9tU3R5bGVzID0gUGFydGlhbDxcbiAgT21pdDxTdHlsZVJ1bGVzLCAnYm9yZGVyV2lkdGgnIHwgJ21pbkhlaWdodCcgfCAnbWluV2lkdGgnIHwgJ2ZvbnRTaXplJz4gJiB7XG4gICAgbWluSGVpZ2h0OiBudW1iZXJcbiAgICBtaW5XaWR0aDogbnVtYmVyXG4gICAgZm9udFNpemU6IG51bWJlclxuICB9XG4+XG5cbmRlY2xhcmUgbW9kdWxlICdzcmMvcmVuZGVyRHJpdmVyJyB7XG4gIGludGVyZmFjZSBSZW5kZXJEcml2ZXJSdWxlIGV4dGVuZHMgQ3VzdG9tU3R5bGVzIHtcbiAgICBpbm5lckhUTUw/OiBzdHJpbmdcbiAgICBpbm5lclRleHQ/OiBzdHJpbmdcbiAgICBjb3JuZXI/OiBudW1iZXJcbiAgICBiYWNrZ3JvdW5kRml0PzogRml0T3B0aW9uXG4gICAgYmFja2dyb3VuZENvbG9yT3BhY2l0eT86IG51bWJlclxuICAgIGlzQm9sZD86IGJvb2xlYW5cbiAgICBpc0l0YWxpYz86IGJvb2xlYW5cbiAgICBpc1Rocm91Z2g/OiBib29sZWFuXG4gICAgJGF0dHJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPlxuICB9XG59XG5cbmNvbnN0IHdyYXBUbyA9ICh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyLCB1bnRpbDogJyUnIHwgJ3B4JykgPT4gYCR7dmFsdWV9JHt1bnRpbH1gXG5cbmNvbnN0IHRvUHggPSAoa2V5OiBzdHJpbmcpID0+IGtleS5zdGFydHNXaXRoKCdweF8nKVxuY29uc3QgdG9QZXJjZW50ID0gKGtleTogc3RyaW5nKSA9PiBrZXkuc3RhcnRzV2l0aCgncGVyY2VudF8nKVxuXG5jb25zdCBmb3JtYXRSdWxlID0gKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gIGxldCBuZXdLZXkgPSBrZXlcbiAgbGV0IG5ld1ZhbHVlID0gdmFsdWVcblxuICBpZiAodG9QeChuZXdLZXkpKSB7XG4gICAgbmV3S2V5ID0gbmV3S2V5LnJlcGxhY2UoJ3B4XycsICcnKVxuICAgIG5ld1ZhbHVlID0gd3JhcFRvKHZhbHVlLCAncHgnKVxuICB9XG4gIGlmICh0b1BlcmNlbnQobmV3S2V5KSkge1xuICAgIG5ld0tleSA9IG5ld0tleS5yZXBsYWNlKCdwZXJjZW50XycsICcnKVxuICAgIG5ld1ZhbHVlID0gd3JhcFRvKHZhbHVlLCAnJScpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGtleTogbmV3S2V5LFxuICAgIHZhbHVlOiBuZXdWYWx1ZVxuICB9XG59XG5cbmNvbnN0IERFRkFVTFRfVE9fUFggPSBbXG4gICdib3JkZXJXaWR0aCcsXG4gICdib3JkZXJMZWZ0V2lkdGgnLFxuICAnYm9yZGVyUmlnaHRXaWR0aCcsXG4gICdib3JkZXJUb3BXaWR0aCcsXG4gICdib3JkZXJCb3R0b21XaWR0aCcsXG4gICdtaW5IZWlnaHQnLFxuICAnbWluV2lkdGgnLFxuICAnbWF4V2lkdGgnLFxuICAnbWF4SGVpZ2h0JyxcbiAgJ2ZvbnRTaXplJyxcbiAgJ2hlaWdodCcsXG4gICd3aWR0aCcsXG4gICdsZXR0ZXJTcGFjaW5nJyxcbiAgJ2ZvbnRTaXplJyxcbiAgJ2xlZnQnLFxuICAncmlnaHQnLFxuICAndG9wJyxcbiAgJ2JvdHRvbScsXG4gICdtYXJnaW5Ub3AnLFxuICAnbWFyZ2luQm90dG9tJyxcbiAgJ21hcmdpbkxlZnQnLFxuICAnbWFyZ2luUmlnaHQnLFxuICAncGFkZGluZ1RvcCcsXG4gICdwYWRkaW5nQm90dG9tJyxcbiAgJ3BhZGRpbmdMZWZ0JyxcbiAgJ3BhZGRpbmdSaWdodCdcbl1cblxuZXhwb3J0IGNvbnN0IHBhcnNlUnVsZXMgPSAocnVsZXM6IEFueU9iamVjdCwgbGF5ZXI/OiBzdHJpbmcpID0+IHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJ1bGVzKVxuXG4gIGlmIChrZXlzLmluY2x1ZGVzKCdpbm5lckhUTUwnKSB8fCBrZXlzLmluY2x1ZGVzKCdpbm5lclRleHQnKSkge1xuICAgIGNvbnNvbGUud2FybihgV2FybmluZyEgSW5uZXJIVE1MIGFuZCBpbm5lclRleHQgaXMgZGVwcmVjYXRlZC4gVXNlIFwiY2hpbGRyZW5cIiBwcm9wZXJ0eS5gLCBsYXllcilcbiAgfVxuXG4gIGlmICh0eXBlb2YgcnVsZXMgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHJ1bGVzXG4gIH1cblxuICBpZiAoJ3R5cG9ncmFwaHknIGluIHJ1bGVzICYmICdhY2NlbnRUeXBvZ3JhcGh5JyBpbiBydWxlcykge1xuICAgIGNvbnN0IHR5cG9ncmFwaHkgPSBydWxlcy50eXBvZ3JhcGh5XG4gICAgY29uc3QgYWNjZW50VHlwb2dyYXBoeSA9IHJ1bGVzLmFjY2VudFR5cG9ncmFwaHlcblxuICAgIHJ1bGVzID0ge1xuICAgICAgLi4ucnVsZXMsXG4gICAgICAuLi50eXBvZ3JhcGh5LFxuICAgICAgJy0tZm9udC1mYW1pbHknOiBhY2NlbnRUeXBvZ3JhcGh5LmZvbnRGYW1pbHksXG4gICAgICAnLS1hY2NlbnQtY29sb3InOiBhY2NlbnRUeXBvZ3JhcGh5LmNvbG9yLFxuICAgICAgJ3B4Xy0tYWNjZW50LXNpemUnOiBhY2NlbnRUeXBvZ3JhcGh5LmZvbnRTaXplXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJ1bGVzKS5yZWR1Y2UoKGFjYywgW3Byb3BLZXksIHByb3BWYWx1ZV0pID0+IHtcbiAgICBpZiAoREVGQVVMVF9UT19QWC5pbmNsdWRlcyhwcm9wS2V5KSkge1xuICAgICAgcHJvcFZhbHVlID0gd3JhcFRvKHByb3BWYWx1ZSwgJ3B4JylcbiAgICB9XG5cbiAgICBjb25zdCB7IGtleSwgdmFsdWUgfSA9IGZvcm1hdFJ1bGUocHJvcEtleSwgcHJvcFZhbHVlKVxuICAgIGFjY1trZXldID0gdmFsdWVcblxuICAgIGlmIChrZXkgPT09ICdpbm5lckhUTUwnKSB7XG4gICAgICBhY2MuaW5uZXJIVE1MID0gaXNWYWx1ZSh2YWx1ZSkgPyBgJHt2YWx1ZX1gIDogJydcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnaW5uZXJUZXh0Jykge1xuICAgICAgYWNjLmlubmVyVGV4dCA9IGlzVmFsdWUodmFsdWUpID8gYCR7dmFsdWV9YCA6ICcnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2NoaWxkcmVuJykge1xuICAgICAgYWNjLmNoaWxkcmVuID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IChpc1ZhbHVlKHZhbHVlKSA/IGAke3ZhbHVlfWAgOiAnJykgOiB2YWx1ZVxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdpbm5lckhUTUwnIHx8IGtleSA9PT0gJ2lubmVyVGV4dCcgfHwga2V5ID09PSAnY2hpbGRyZW4nKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgYWNjLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgIH0gZWxzZSBpZiAoaXNFbXB0eVZhbHVlKHZhbHVlKSkge1xuICAgICAgICBhY2MuZGlzcGxheSA9ICdub25lJ1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChrZXkuaW5jbHVkZXMoJ2JvcmRlcldpZHRoJykpIHtcbiAgICAgIGFjYy5ib3JkZXJTdHlsZSA9ICdzb2xpZCdcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnY29ybmVyJykge1xuICAgICAgYWNjLmJvcmRlclJhZGl1cyA9IHdyYXBUbyh2YWx1ZSwgJ3B4JylcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnYmFja2dyb3VuZEZpdCcpIHtcbiAgICAgIGFjYy5iYWNrZ3JvdW5kU2l6ZSA9IHZhbHVlIGFzIEZpdE9wdGlvblxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdiYWNrZ3JvdW5kSW1hZ2UnICYmIGlzVmFsdWUodmFsdWUpKSB7XG4gICAgICBhY2MuYmFja2dyb3VuZEltYWdlID0gYHVybCgke3ZhbHVlfSlgXG4gICAgICBhY2MuYmFja2dyb3VuZFJlcGVhdCA9ICduby1yZXBlYXQnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2JhY2tncm91bmRDb2xvck9wYWNpdHknICYmIGlzVmFsdWUoYWNjLmJhY2tncm91bmRDb2xvck9wYWNpdHkpICYmIGlzVmFsdWUoYWNjLmJhY2tncm91bmRDb2xvcikpIHtcbiAgICAgIGNvbnN0IHJnYiA9IGhleFRvUmdiKGFjYy5iYWNrZ3JvdW5kQ29sb3IpXG4gICAgICBpZiAocmdiKSB7XG4gICAgICAgIGFjYy5iYWNrZ3JvdW5kQ29sb3IgPSByZ2JUb1JnYmEoYHJnYigke3JnYi5yfSwgJHtyZ2IuZ30sICR7cmdiLmJ9KWAsICthY2MuYmFja2dyb3VuZENvbG9yT3BhY2l0eSAvIDEwMClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnaXNCb2xkJykge1xuICAgICAgYWNjLmZvbnRXZWlnaHQgPSB2YWx1ZSA/ICdib2xkJyA6ICdpbml0aWFsJ1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdpc0l0YWxpYycpIHtcbiAgICAgIGFjYy5mb250U3R5bGUgPSB2YWx1ZSA/ICdpdGFsaWMnIDogJ2luaXRpYWwnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2lzVGhyb3VnaCcpIHtcbiAgICAgIGFjYy50ZXh0RGVjb3JhdGlvbiA9IHZhbHVlID8gJ2xpbmUtdGhyb3VnaCcgOiAnaW5pdGlhbCdcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjXG4gIH0sIHJ1bGVzKVxufVxuIiwiaW1wb3J0IHsgcGFyc2VSdWxlcyB9IGZyb20gJy4uL2hlbHBlcnMvcGFyc2VSdWxlcydcbmltcG9ydCB7IEFueU9iamVjdCB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuXG5jb25zdCBpc1ZhbGlkUnVsZSA9IChydWxlOiBBbnlPYmplY3QpID0+IHR5cGVvZiBydWxlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShydWxlKSAmJiAncGFyZW50JyBpbiBydWxlXG5cbmV4cG9ydCBjb25zdCB1c2VQYXJzZVJ1bGVzID0gKHN0YXRlOiB1bmtub3duKSA9PlxuICBPYmplY3QuZW50cmllcyhzdGF0ZSkucmVkdWNlKChhY2MsIFtsYXllciwgcnVsZV0pID0+IHtcbiAgICBhY2NbbGF5ZXJdID0gaXNWYWxpZFJ1bGUocnVsZSkgPyBwYXJzZVJ1bGVzKHsgLi4uc3RhdGVbbGF5ZXJdIH0sIGxheWVyKSA6IHJ1bGVcblxuICAgIHJldHVybiBhY2NcbiAgfSwge30pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5cbmludGVyZmFjZSBQcm9wcyB7XG4gIGNoaWxkcmVuOiBzdHJpbmdcbn1cblxuY29uc3QgRGlzcGxheVRleHQ6IEZDPFByb3BzPiA9ICh7IGNoaWxkcmVuLCAuLi5yZXN0IH0pID0+IHtcbiAgY29uc3QgZm9ybWF0VmFsdWUgPSBjaGlsZHJlbj8ucmVwbGFjZSgnc2NyaXB0JywgJycpPy5yZXBsYWNlKC97eyguKj8pfX0vZywgYDxzcGFuPiQxPC9zcGFuPmApXG5cbiAgcmV0dXJuIDxkaXYgey4uLnJlc3R9IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogZm9ybWF0VmFsdWUgfX0gLz5cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGlzcGxheVRleHRcbiIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcblxuZXhwb3J0IGNvbnN0IHVzZVRvZ2dsZSA9ICgpID0+IHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIHJldHVybiBbaXNPcGVuLCAoKSA9PiBzZXRJc09wZW4ocHJldiA9PiAhcHJldildXG59XG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5cbmNvbnN0IENsb3NlSWNvbjogRkMgPSAoKSA9PiAoXG4gIDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjAnIGhlaWdodD0nMjAnIHZpZXdCb3g9JzAgMCAyNCAyNCc+XG4gICAgPHBhdGhcbiAgICAgIGQ9J00xNy42NTkgNC45MjlhMSAxIDAgMSAxIDEuNDE0IDEuNDE0TDEzLjQxNiAxMmw1LjY1NyA1LjY1N2ExIDEgMCAwIDEtMS40MTUgMS40MTRsLTUuNjU2LTUuNjU3LTUuNjU3IDUuNjU3YTEgMSAwIDAgMS0xLjQxNC0xLjQxNEwxMC41ODcgMTIgNC45MzEgNi4zNDNBMSAxIDAgMSAxIDYuMzQ1IDQuOTNsNS42NTcgNS42NTcgNS42NTYtNS42NTdaJ1xuICAgICAgZmlsbD0nY3VycmVudENvbG9yJ1xuICAgID48L3BhdGg+XG4gIDwvc3ZnPlxuKVxuXG5leHBvcnQgZGVmYXVsdCBDbG9zZUljb25cbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcblxuY29uc3QgR2lmdEljb246IEZDID0gKCkgPT4gKFxuICA8c3ZnIHZpZXdCb3g9JzAgMCAxNiAxNic+XG4gICAgPHBhdGhcbiAgICAgIGZpbGw9J2N1cnJlbnRDb2xvcidcbiAgICAgIGZpbGxSdWxlPSdldmVub2RkJ1xuICAgICAgZD0nTTIuMTMgOEg3djcuMzFIMy4yMmExLjA5IDEuMDkgMCAwMS0xLjA5LTEuMDl6TTkgMTUuMzRoMy44MWExLjA5IDEuMDkgMCAwMDEuMDktMS4wOVY4SDl6bTUuOC05Ljk0djEuMTlhLjQ4LjQ4IDAgMDEtLjQ4LjQ4SDEuNzFhLjQ4LjQ4IDAgMDEtLjQ4LS40OFY1LjRjMC0uNTk2LjQ4NC0xLjA4IDEuMDgtMS4wOEg1YTIuNDggMi40OCAwIDAxLTEuNDctMS42NSAxLjYyIDEuNjIgMCAwMS4yNi0xLjQgMS41NyAxLjU3IDAgMDExLS41OGMuMTEtLjAxLjIyLS4wMS4zMyAwYTIuNSAyLjUgMCAwMTIgMUE5IDkgMCAwMTggMy4yMmExMC4zOCAxMC4zOCAwIDAxLjkxLTEuNTQgMi40OSAyLjQ5IDAgMDExLjkzLTFoLjM2Yy4zNjkuMDY1LjcwMi4yNi45NC41NS4zMS40MDcuNDE0LjkzNi4yOCAxLjQzYTIuNDggMi40OCAwIDAxLTEuNDUgMS42NGgyLjc3YTEuMDggMS4wOCAwIDAxMS4wMyAxLjF6TTguNjYgNGE5LjgxIDkuODEgMCAwMDEuOS0uNTUgMS41MiAxLjUyIDAgMDAuODgtMSAuNjguNjggMCAwMC0uMS0uNTkuNi42IDAgMDAtLjM0LS4yMi41OC41OCAwIDAwLS4xOCAwIDEuNTIgMS41MiAwIDAwLTEuMTcuNjNBOS4wNiA5LjA2IDAgMDA4LjY2IDR6bS0zLjMyLS41OEE5LjYyIDkuNjIgMCAwMDcuMjUgNGE4LjU5IDguNTkgMCAwMC0xLTEuNzIgMS41MSAxLjUxIDAgMDAtMS4xOC0uNjNoLS4xM2EuNjYuNjYgMCAwMC0uMzkuMjIuNjYuNjYgMCAwMC0uMDkuNTdjLjEzLjQ0My40NTMuODA0Ljg4Ljk4eidcbiAgICA+PC9wYXRoPlxuICA8L3N2Zz5cbilcblxuZXhwb3J0IGRlZmF1bHQgR2lmdEljb25cbiIsImltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICcuLi91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgaXNWYWx1ZSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuXG50eXBlIEFuaW1hdGlvbk5hbWUgPSAnZmFkZScgfCAncHVsc2UnIHwgJ3dpZ2dsZScgfCAnZ3JhZGllbnQnXG5cbmNvbnN0IGFuaW1hdGlvbnNNYXAgPSAoYW5pbWF0aW9uczogUmVjb3JkPEFuaW1hdGlvbk5hbWUsIHN0cmluZz4pID0+ICh7XG4gIGZhZGU6IGAke2FuaW1hdGlvbnMuZmFkZX0gMnMgbGluZWFyIGluZmluaXRlYCxcbiAgcHVsc2U6IGAke2FuaW1hdGlvbnMucHVsc2V9IC4zcyBsaW5lYXIgMHMgaW5maW5pdGUgYWx0ZXJuYXRlIGZvcndhcmRzYCxcbiAgd2lnZ2xlOiBgJHthbmltYXRpb25zLndpZ2dsZX0gMnMgbGluZWFyIGluZmluaXRlYCxcbiAgZ3JhZGllbnQ6IGAke2FuaW1hdGlvbnMuZ3JhZGllbnR9IDNzIGVhc2UgaW5maW5pdGVgLFxufSlcblxuZXhwb3J0IGNvbnN0IHVzZUdpZnRSdWxlcyA9IChkZXZpY2VTdGF0ZTogdW5rbm93biwgYW5pbWF0aW9uczogUmVjb3JkPEFuaW1hdGlvbk5hbWUsIHN0cmluZz4pID0+IHtcbiAgY29uc3QgZnVsbEFuaW1hdGlvbnMgPSBhbmltYXRpb25zTWFwKGFuaW1hdGlvbnMpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcbiAgY29uc3QgaGFzSWNvbiA9IHJ1bGVzPy5pY29uPy5oYXNJY29uXG5cbiAgY29uc3QgYXJyb3dSdWxlcyA9IHtcbiAgICBsZWZ0OiBgJHsrKGRldmljZVN0YXRlPy5jb250YWluZXI/LmxlZnQgfHwgMCkgKiAtMSArIDh9cHhgLFxuICAgIGJhY2tncm91bmRDb2xvcjogcnVsZXM/LmNvbnRhaW5lcj8uYmFja2dyb3VuZENvbG9yLFxuICAgIGJvcmRlclRvcFdpZHRoOiBydWxlcz8uY29udGFpbmVyPy5ib3JkZXJXaWR0aCxcbiAgICBib3JkZXJUb3BDb2xvcjogcnVsZXM/LmNvbnRhaW5lcj8uYm9yZGVyQ29sb3IsXG4gICAgYm9yZGVyVG9wU3R5bGU6ICdzb2xpZCcsXG4gICAgYm9yZGVyTGVmdFdpZHRoOiBydWxlcz8uY29udGFpbmVyPy5ib3JkZXJXaWR0aCxcbiAgICBib3JkZXJMZWZ0Q29sb3I6IHJ1bGVzPy5jb250YWluZXI/LmJvcmRlckNvbG9yLFxuICAgIGJvcmRlckxlZnRTdHlsZTogJ3NvbGlkJ1xuICB9XG5cbiAgY29uc3QgYm9keVJ1bGVzID0ge1xuICAgIGxlZnQ6IHJ1bGVzPy5jb250YWluZXI/LmxlZnRcbiAgfVxuXG4gIGNvbnN0IGFsbEFuaW1hdGlvbnMgPSAocnVsZXM/Lmljb24/LmFuaW1hdGlvbnMgfHwgW10pXG4gICAgLm1hcCgoYW5pbWF0aW9uOiBBbmltYXRpb25OYW1lKSA9PiBmdWxsQW5pbWF0aW9uc1thbmltYXRpb25dKVxuICAgIC5qb2luKCcsICcpXG5cbiAgY29uc3QgYmFja2dyb3VuZFN0eWxlcyA9XG4gICAgaXNWYWx1ZShydWxlcz8uaWNvbj8uZ3JhZGllbnRDb2xvcikgJiYgcnVsZXM/Lmljb24/LmFuaW1hdGlvbnMuaW5jbHVkZXMoJ2dyYWRpZW50JylcbiAgICAgID8ge1xuICAgICAgICAgIGJhY2tncm91bmQ6IGBsaW5lYXItZ3JhZGllbnQoLTkwZGVnLCAke3J1bGVzLmljb24/LmJhY2tncm91bmRDb2xvcn0gMCUsICR7cnVsZXM/Lmljb24/LmdyYWRpZW50Q29sb3J9IDEwMCUpIDAlIDAlIC8gNDAwJSA0MDAlYCxcbiAgICAgICAgICBiYWNrZ3JvdW5kU2l6ZTogJzQwMCUgNDAwJSdcbiAgICAgICAgfVxuICAgICAgOiB7fVxuXG4gIGNvbnN0IGljb25SdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8uaWNvbiB8fCB7fSxcbiAgICBhbmltYXRpb246IGFsbEFuaW1hdGlvbnMsXG4gICAgLi4uYmFja2dyb3VuZFN0eWxlc1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBoYXNJY29uLFxuICAgIGFycm93UnVsZXMsXG4gICAgYm9keVJ1bGVzLFxuICAgIGljb25SdWxlc1xuICB9XG59XG4iLCJleHBvcnQgY29uc3QgYmFja2dyb3VuZE9wdGlvbnMgPSBbJ2JhY2tncm91bmRDb2xvcicsICdiYWNrZ3JvdW5kQ29sb3JPcGFjaXR5JywgJ2JhY2tncm91bmRJbWFnZScsICdiYWNrZ3JvdW5kRml0J11cblxuZXhwb3J0IGNvbnN0IHNwYWNpbmdPcHRpb25zID0gW1xuICAnbWFyZ2luVG9wJyxcbiAgJ21hcmdpbkJvdHRvbScsXG4gICdtYXJnaW5MZWZ0JyxcbiAgJ21hcmdpblJpZ2h0JyxcbiAgJ3BhZGRpbmdUb3AnLFxuICAncGFkZGluZ0JvdHRvbScsXG4gICdwYWRkaW5nTGVmdCcsXG4gICdwYWRkaW5nUmlnaHQnXG5dXG5cblxuZXhwb3J0IGNvbnN0IG5vb3BZYU1ldHJpa2EgPSAoZ29hbDogc3RyaW5nKSA9PiBjb25zb2xlLmxvZyhgTm9vcCBZYU1la3Rpa2EgcmVhY2ggZ29hbDogJHtnb2FsfWApXG5leHBvcnQgY29uc3Qgbm9vcEFkRm94ID0gKGdvYWw6IHN0cmluZykgPT4gY29uc29sZS5sb2coYE5vb3AgQWRGb3ggcmVhY2ggZ29hbDogJHtnb2FsfWApXG4iLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgeyBpc0pzb25TYW1lLCBwaWNrIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyBub29wQWRGb3gsIG5vb3BZYU1ldHJpa2EgfSBmcm9tIFwic3JjL2hlbHBlcnMvY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBjb25zdCB1c2VNZXRyaWNzID0gKHN0YXRlOiB1bmtub3duLCBsYXllck5hbWUgPSAncm9vdCcpID0+IHtcbiAgY29uc3Qgc2F2ZU1ldHJpY3MgPSB1c2VSZWYoKVxuICBjb25zdCB5YVJlYWNoR29hbCA9IHN0YXRlLnlhUmVhY2hHb2FsIHx8IG5vb3BZYU1ldHJpa2FcbiAgY29uc3QgYWRmb3hSZWFjaEdvYWwgPSBzdGF0ZS5hZGZveFJlYWNoR29hbCB8fCBub29wQWRGb3hcbiAgY29uc3QgbWV0cmljcyA9IHBpY2soc3RhdGVbbGF5ZXJOYW1lXSwgJ3lhU2hvdycsICd5YUNsaWNrJywgJ2FkZm94U2hvdycsICdhZGZveENsaWNrJylcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNKc29uU2FtZShzYXZlTWV0cmljcy5jdXJyZW50LCBtZXRyaWNzKSkge1xuICAgICAgaWYgKG1ldHJpY3MueWFTaG93KSB7XG4gICAgICAgIHlhUmVhY2hHb2FsKG1ldHJpY3MueWFTaG93KVxuICAgICAgfVxuICAgICAgaWYgKG1ldHJpY3MueWFTaG93KSB7XG4gICAgICAgIGFkZm94UmVhY2hHb2FsKG1ldHJpY3MuYWRmb3hTaG93KVxuICAgICAgfVxuICAgIH1cbiAgICBzYXZlTWV0cmljcy5jdXJyZW50ID0gbWV0cmljc1xuICB9LCBbbWV0cmljc10pXG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAobWV0cmljcy55YUNsaWNrKSB7XG4gICAgICB5YVJlYWNoR29hbChtZXRyaWNzLnlhQ2xpY2spXG4gICAgfVxuICAgIGlmIChtZXRyaWNzLmFkZm94Q2xpY2spIHtcbiAgICAgIGFkZm94UmVhY2hHb2FsKG1ldHJpY3MuYWRmb3hDbGljaylcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IGluamVjdExpbmssIGl0ZXJhdG9yIH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8gfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiOyAvLyBodHRwczovL2dpdGh1Yi5jb20vRG93bmxvYWQvcHJlYWN0LWhlbG1ldC9pc3N1ZXMvMzRcblxuZXhwb3J0IGNvbnN0IHVzZUV4dHJhY3RGb250cyA9IChzdGF0ZTogdW5rbm93bikgPT4ge1xuICBjb25zdCBmb250cyA9IG5ldyBTZXQoW10pXG5cbiAgaXRlcmF0b3Ioc3RhdGUsIChrZXksIHZhbHVlKSA9PiB7XG4gICAgaWYgKGtleSA9PT0gJ2ZvbnRGYW1pbHknKSB7XG4gICAgICBmb250cy5hZGQodmFsdWUpXG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlXG4gIH0pXG5cbiAgY29uc3QgZm9udExpbmtzID0gdXNlTWVtbygoKSA9PiBBcnJheS5mcm9tKGZvbnRzLnZhbHVlcygpKS5tYXAoZm9udCA9PiAoe1xuICAgIHJlbDogJ3N0eWxlc2hlZXQnLFxuICAgIGhyZWY6IGBodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9JHtmb250fTozMDAsNDAwLDUwMCw3MDAmZGlzcGxheT1zd2FwYFxuICB9KSksIFtmb250c10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmb250TGlua3MuZm9yRWFjaCgobGluaykgPT4gaW5qZWN0TGluayhsaW5rKSlcbiAgfSwgW2ZvbnRMaW5rc10pXG59XG4iLCJpbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgRkMsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgJ3NyYy9oZWxwZXJzL3Jlc2V0LnNjc3MnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlR2lmdE9wZW4gfSBmcm9tICdzcmMvaG9va3MvdXNlR2lmdE9wZW4nXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VDb250YWluZXJEZXZpY2UgfSBmcm9tICdzcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuaW1wb3J0IHsgdXNlVG9nZ2xlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVRvZ2dsZSdcbmltcG9ydCBDbG9zZUljb24gZnJvbSAnc3JjL2NvbXBvbmVudHMvQ2xvc2VJY29uJ1xuaW1wb3J0IEdpZnRJY29uIGZyb20gJ3NyYy9jb21wb25lbnRzL0dpZnRJY29uJ1xuaW1wb3J0IHsgdXNlR2lmdFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3Byb21vcy91c2VHaWZ0UnVsZXMnXG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZU1ldHJpY3MnXG5pbXBvcnQgeyB1c2VFeHRyYWN0Rm9udHMgfSBmcm9tICdzcmMvaG9va3MvdXNlRXh0cmFjdEZvbnRzJ1xuXG5jb25zdCBTaW1wbGVHaWZ0OiBGQzxTdGF0ZT4gPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgW2xlZ2FsSXNPcGVuLCB0b2dnbGVMZWdhbElzT3Blbl0gPSB1c2VUb2dnbGUoKVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZTxTdGF0ZT4oKVxuICBjb25zdCBkZXZpY2UgPSB1c2VDb250YWluZXJEZXZpY2UoeyB0YXJnZXRSZWY6IHJvb3RSZWYgfSlcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VHZXRSdWxlcyhzdGF0ZSwgZGV2aWNlKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VNZXRyaWNzKGRldmljZVN0YXRlKVxuICBjb25zdCB7IGlzT3Blbiwgb25Ub2dnbGUgfSA9IHVzZUdpZnRPcGVuKGRldmljZVN0YXRlPy5jb250YWluZXI/LmRlbGF5KVxuICBjb25zdCB7IGhhc0ljb24sIGljb25SdWxlcywgYm9keVJ1bGVzLCBhcnJvd1J1bGVzIH0gPSB1c2VHaWZ0UnVsZXMoZGV2aWNlU3RhdGUsIHtcbiAgICBmYWRlOiBzdHlsZXMuZmFkZWluLFxuICAgIHB1bHNlOiBzdHlsZXMucHVsc2UsXG4gICAgd2lnZ2xlOiBzdHlsZXMud2lnZ2xlLFxuICAgIGdyYWRpZW50OiBzdHlsZXMuZ3JhZGllbnRcbiAgfSlcbiAgdXNlRXh0cmFjdEZvbnRzKGRldmljZVN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yb290fSByZWY9e3Jvb3RSZWZ9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pY29ufSBzdHlsZT17aWNvblJ1bGVzfSBvbkNsaWNrPXtvblRvZ2dsZX0+XG4gICAgICAgIHtoYXNJY29uICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmljb25UYXJnZXR9PlxuICAgICAgICAgICAgPEdpZnRJY29uIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5ib2R5LCB7IFtzdHlsZXMuYm9keU9wZW5dOiBpc09wZW4gfSl9IHN0eWxlPXtib2R5UnVsZXN9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmFycm93fSBzdHlsZT17YXJyb3dSdWxlc30+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY2xvc2V9IHN0eWxlPXtydWxlcy5jbG9zZX0gb25DbGljaz17b25Ub2dnbGV9PlxuICAgICAgICAgIDxDbG9zZUljb24gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGFpbmVyfSBzdHlsZT17cnVsZXMuY29udGFpbmVyfT5cbiAgICAgICAgICA8YSBocmVmPXtydWxlcy5yb290Py5vZmZlcn0gdGFyZ2V0PSdfYmxhbmsnIHJlbD0nbm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlcicgb25DbGljaz17b25DbGlja30+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmlubmVyfT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30+PC9kaXY+XG4gICAgICAgICAgICAgIDxEaXNwbGF5VGV4dCBjbGFzc05hbWU9e3N0eWxlcy50ZXh0fSBzdHlsZT17cnVsZXMudGV4dH0+XG4gICAgICAgICAgICAgICAge3J1bGVzPy50ZXh0Py5jaGlsZHJlbn1cbiAgICAgICAgICAgICAgPC9EaXNwbGF5VGV4dD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLmJ1dHRvbiwge1xuICAgICAgICAgICAgICAgIFtzdHlsZXMuYnV0dG9uQW5pbWF0ZWRdOiBydWxlcy5idXR0b24uaXNBbmltYXRlZFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgc3R5bGU9e3J1bGVzLmJ1dHRvbn1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2E+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5sZWdhbCwge1xuICAgICAgICAgICAgICBbc3R5bGVzLmxlZ2FsT3Blbl06IGxlZ2FsSXNPcGVuXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIHN0eWxlPXtydWxlcy5sZWdhbH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbFRleHR9PlxuICAgICAgICAgICAgICA8c3Bhbj57cnVsZXM/LmxlZ2FsPy5jaGlsZHJlbn08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsQnV0dG9ufSBvbkNsaWNrPXt0b2dnbGVMZWdhbElzT3Blbn0+XG4gICAgICAgICAgICAgICAge2xlZ2FsSXNPcGVuID8gcnVsZXM/LmxlZ2FsPy5idXR0b25PcGVuVGV4dCA6IHJ1bGVzPy5sZWdhbD8uYnV0dG9uSGlkZVRleHR9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPFNpbXBsZUdpZnQgLz4pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgRGlzcGxheVRleHQgZnJvbSAnc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQnXG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZU1ldHJpY3MnXG5cbmNvbnN0IEJvbnVzQ2FyZDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuICBjb25zdCBvbkNsaWNrID0gdXNlTWV0cmljcyhzdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgcmVsPSdub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyJ1xuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMudmFyaWFudDJdOiBydWxlcy5yb290Py52YXJpYW50ID09PSAndmFyaWFudDInXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtydWxlcy5yb290fVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxpbmV9IHN0eWxlPXtydWxlcy5saW5lfSAvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHlJbm5lcn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRleHR9IHN0eWxlPXtydWxlcy50ZXh0fT5cbiAgICAgICAgICAgIDxEaXNwbGF5VGV4dD57cnVsZXMudGV4dD8uY2hpbGRyZW59PC9EaXNwbGF5VGV4dD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b259IHN0eWxlPXtydWxlcy5idXR0b259PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b25UZXh0fT57cnVsZXMuYnV0dG9uPy5jaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVnYWx9IHN0eWxlPXtydWxlcy5sZWdhbH0+XG4gICAgICAgIHtydWxlcy5sZWdhbD8uY2hpbGRyZW59XG4gICAgICA8L2Rpdj5cbiAgICA8L2E+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgQm9udXNDYXJkXG4iLCJpbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCAnc3JjL2hlbHBlcnMvcmVzZXQuc2NzcydcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VHaWZ0T3BlbiB9IGZyb20gJ3NyYy9ob29rcy91c2VHaWZ0T3BlbidcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VHZXRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgQ2xvc2VJY29uIGZyb20gJ3NyYy9jb21wb25lbnRzL0Nsb3NlSWNvbidcbmltcG9ydCBHaWZ0SWNvbiBmcm9tICdzcmMvY29tcG9uZW50cy9HaWZ0SWNvbidcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCBCb251c0NhcmQgZnJvbSAnLi9jb21wb25lbnRzL0JvbnVzQ2FyZCdcbmltcG9ydCB7IHVzZUV4dHJhY3RGb250cyB9IGZyb20gJ3NyYy9ob29rcy91c2VFeHRyYWN0Rm9udHMnXG5pbXBvcnQgeyB1c2VHaWZ0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvcHJvbW9zL3VzZUdpZnRSdWxlcydcbmltcG9ydCB7IHBpY2sgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcblxuY29uc3QgQ29tcGxleEdpZnQgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgeyBpc09wZW4sIG9uVG9nZ2xlIH0gPSB1c2VHaWZ0T3BlbigpXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgdGFyZ2V0UmVmOiByb290UmVmIH0pXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuICB1c2VFeHRyYWN0Rm9udHMoZGV2aWNlU3RhdGUpXG4gIGNvbnN0IHsgaGFzSWNvbiwgaWNvblJ1bGVzLCBib2R5UnVsZXMsIGFycm93UnVsZXMgfSA9IHVzZUdpZnRSdWxlcyhkZXZpY2VTdGF0ZSwge1xuICAgIGZhZGU6IHN0eWxlcy5mYWRlaW4sXG4gICAgcHVsc2U6IHN0eWxlcy5wdWxzZSxcbiAgICB3aWdnbGU6IHN0eWxlcy53aWdnbGUsXG4gICAgZ3JhZGllbnQ6IHN0eWxlcy5ncmFkaWVudFxuICB9KVxuICBjb25zdCBoYXNUaXRsZUljb24gPSBydWxlcz8udGl0bGU/Lmhhc0ljb25cblxuICByZXR1cm4gKFxuICAgIDxkaXYgcmVmPXtyb290UmVmfSBjbGFzc05hbWU9e3N0eWxlcy5yb290fT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaWNvbn0gc3R5bGU9e2ljb25SdWxlc30gb25DbGljaz17b25Ub2dnbGV9PlxuICAgICAgICB7aGFzSWNvbiAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pY29uVGFyZ2V0fT5cbiAgICAgICAgICAgIDxHaWZ0SWNvbiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMuYm9keSwge1xuICAgICAgICAgIFtzdHlsZXMuYm9keU9wZW5dOiBpc09wZW5cbiAgICAgICAgfSl9XG4gICAgICAgIHN0eWxlPXtib2R5UnVsZXN9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYXJyb3d9IHN0eWxlPXthcnJvd1J1bGVzfSAvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRhaW5lcn0gc3R5bGU9e3J1bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jbG9zZX0gc3R5bGU9e3J1bGVzLmNsb3NlfSBvbkNsaWNrPXtvblRvZ2dsZX0+XG4gICAgICAgICAgICA8Q2xvc2VJY29uIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5wcm9tb3Rpb259IHN0eWxlPXtydWxlcy5wcm9tb3Rpb259PlxuICAgICAgICAgICAge3J1bGVzLnByb21vdGlvbj8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkfT5cbiAgICAgICAgICAgIHtoYXNUaXRsZUljb24gJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRJY29ufSBzdHlsZT17cGljayhydWxlcy50aXRsZSwgJ2NvbG9yJyl9PlxuICAgICAgICAgICAgICAgIDxHaWZ0SWNvbiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRUaXRsZX0gc3R5bGU9e3J1bGVzLnRpdGxlfT57cnVsZXMudGl0bGU/LmNoaWxkcmVufTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pbm5lcn0+XG4gICAgICAgICAgICB7KHJ1bGVzLmNoaWxkcmVuIHx8IFtdKS5tYXAoY2hpbGQgPT4gKFxuICAgICAgICAgICAgICA8U3RhdGVDb250ZXh0IHZhbHVlPXtjaGlsZH0+XG4gICAgICAgICAgICAgICAgPEJvbnVzQ2FyZCAvPlxuICAgICAgICAgICAgICA8L1N0YXRlQ29udGV4dD5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8Q29tcGxleEdpZnQgLz4pXG5cbi8vIGltcG9ydCB7IEVtaXR0ZXJUeXBlIH0gZnJvbSBcInNyY1wiO1xuLy8gaW1wb3J0IHsgaXNFbXB0eVZhbHVlLCBpc1ZhbHVlIH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG4vL1xuXG4vL1xuLy8gZXhwb3J0IGRlZmF1bHQgKGVtaXR0ZXI6IEVtaXR0ZXJUeXBlKSA9PiB7XG4vLyAgIGVtaXR0ZXIub24oJ3JlbmRlck5vZGUnLCAoeyBydWxlLCBsYXllciB9KSA9PiB7XG4vLyAgICAgaWYgKCckYW5pbWF0aW9ucycgaW4gcnVsZSkge1xuLy8gICAgICAgY29uc3QgYWxsQW5pbWF0aW9ucyA9IHJ1bGUuJGFuaW1hdGlvbnNcbi8vICAgICAgICAgLm1hcCgoYW5pbWF0aW9uOiBrZXlvZiB0eXBlb2YgYW5pbWF0aW9uc01hcCkgPT4gYW5pbWF0aW9uc01hcFthbmltYXRpb25dKVxuLy8gICAgICAgICAuam9pbignLCAnKVxuLy9cbi8vICAgICAgIGNvbnN0IGJhY2tncm91bmRTdHlsZXMgPVxuLy8gICAgICAgICBpc1ZhbHVlKHJ1bGUuJGdyYWRpZW50Q29sb3IpICYmIHJ1bGUuJGFuaW1hdGlvbnMuaW5jbHVkZXMoJ2dyYWRpZW50Jylcbi8vICAgICAgICAgICA/IHtcbi8vICAgICAgICAgICAgIGJhY2tncm91bmQ6IGBsaW5lYXItZ3JhZGllbnQoLTkwZGVnLCAke3J1bGUuYmFja2dyb3VuZENvbG9yfSAwJSwgJHtydWxlLiRncmFkaWVudENvbG9yfSAxMDAlKWAsXG4vLyAgICAgICAgICAgICBiYWNrZ3JvdW5kU2l6ZTogJzQwMCUgNDAwJSdcbi8vICAgICAgICAgICB9XG4vLyAgICAgICAgICAgOiB7fVxuLy9cbi8vICAgICAgIGVtaXR0ZXIuZW1pdCgncnVuUmVuZGVyJywge1xuLy8gICAgICAgICBpY29uOiB7XG4vLyAgICAgICAgICAgYW5pbWF0aW9uOiBhbGxBbmltYXRpb25zLFxuLy8gICAgICAgICAgIC4uLmJhY2tncm91bmRTdHlsZXNcbi8vICAgICAgICAgfVxuLy8gICAgICAgfSlcbi8vICAgICB9XG4vL1xuLy8gICAgIGlmIChsYXllci5sYXllciA9PT0gJ2ljb24nICYmICFpc0VtcHR5VmFsdWUocnVsZS5oYXNJY29uKSkge1xuLy8gICAgICAgZW1pdHRlci5lbWl0KCdydW5SZW5kZXInLCB7XG4vLyAgICAgICAgIGljb25UYXJnZXQ6IHtcbi8vICAgICAgICAgICBkaXNwbGF5OiBydWxlLmhhc0ljb24gPyAnZmxleCcgOiAnbm9uZSdcbi8vICAgICAgICAgfVxuLy8gICAgICAgfSlcbi8vICAgICB9XG4vL1xuLy8gICAgIGlmIChsYXllci5sYXllciA9PT0gJ3RpdGxlJykge1xuLy8gICAgICAgZW1pdHRlci5lbWl0KCdydW5SZW5kZXInLCB7XG4vLyAgICAgICAgIGhlYWRlckljb246IHtcbi8vICAgICAgICAgICBkaXNwbGF5OiBydWxlLmhhc0ljb24gPyAnYmxvY2snIDogJ25vbmUnXG4vLyAgICAgICAgIH1cbi8vICAgICAgIH0pXG4vLyAgICAgfVxuLy9cbi8vICAgICBpZiAobGF5ZXIubGF5ZXIgPT09ICdjb250YWluZXInKSB7XG4vLyAgICAgICBlbWl0dGVyLmVtaXQoJ3J1blJlbmRlcicsIHtcbi8vICAgICAgICAgYm9keToge1xuLy8gICAgICAgICAgICRkZWxheTogcnVsZS5kZWxheSxcbi8vICAgICAgICAgICBsZWZ0OiBydWxlLmxlZnRcbi8vICAgICAgICAgfSxcbi8vICAgICAgICAgYXJyb3c6IHtcbi8vICAgICAgICAgICBsZWZ0OiBgJHsrKHJ1bGUubGVmdCB8fCAwKSAqIC0xICsgOH1gLFxuLy8gICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogcnVsZS5iYWNrZ3JvdW5kQ29sb3IsXG4vLyAgICAgICAgICAgYm9yZGVyVG9wV2lkdGg6IHJ1bGUuYm9yZGVyV2lkdGgsXG4vLyAgICAgICAgICAgYm9yZGVyVG9wQ29sb3I6IHJ1bGUuYm9yZGVyQ29sb3IsXG4vLyAgICAgICAgICAgYm9yZGVyVG9wU3R5bGU6ICdzb2xpZCcsXG4vLyAgICAgICAgICAgYm9yZGVyTGVmdFdpZHRoOiBydWxlLmJvcmRlcldpZHRoLFxuLy8gICAgICAgICAgIGJvcmRlckxlZnRDb2xvcjogcnVsZS5ib3JkZXJDb2xvcixcbi8vICAgICAgICAgICBib3JkZXJMZWZ0U3R5bGU6ICdzb2xpZCdcbi8vICAgICAgICAgfVxuLy8gICAgICAgfSlcbi8vICAgICB9XG4vLyAgIH0pXG4vLyB9XG4iLCJleHBvcnQgY29uc3Qgc3dpdGNoVGV4dEFsaWduVG9GbGV4ID0gKHRleHRBbGlnbj86IHN0cmluZykgPT5cbiAgdGV4dEFsaWduID8geyBsZWZ0OiAnZmxleC1zdGFydCcsIGNlbnRlcjogJ2NlbnRlcicsIHJpZ2h0OiAnZmxleC1lbmQnIH1bdGV4dEFsaWduXSA6IHRleHRBbGlnblxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgRGlzcGxheVRleHQgZnJvbSAnc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5cbmNvbnN0IExpbmU6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm9vdH0gc3R5bGU9e3J1bGVzLnJvb3R9PlxuICAgICAgPERpc3BsYXlUZXh0PntydWxlcz8ucm9vdD8uY2hpbGRyZW59PC9EaXNwbGF5VGV4dD5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBMaW5lXG4iLCJpbXBvcnQgeyBGQywgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyBzZXQgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCAnc3JjL2hlbHBlcnMvcmVzZXQuc2NzcydcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDb250YWluZXJEZXZpY2UgfSBmcm9tICdzcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZUdldFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZURldmljZVN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICdzcmMvU3RhdGVDb250ZXh0J1xuaW1wb3J0IHsgc3dpdGNoVGV4dEFsaWduVG9GbGV4IH0gZnJvbSBcInNyYy9oZWxwZXJzL3N3aXRjaFRleHRBbGlnblRvRmxleFwiO1xuaW1wb3J0IExpbmUgZnJvbSAnLi9jb21wb25lbnRzL2xpbmUnXG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSBcInNyYy9ob29rcy91c2VNZXRyaWNzXCI7XG5cbmNvbnN0IFNpbXBsZVBvcHVwOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgcm9vdFJlZiA9IHVzZVJlZihudWxsKVxuICBjb25zdCBkZXZpY2UgPSB1c2VDb250YWluZXJEZXZpY2UoeyB0YXJnZXRSZWY6IHJvb3RSZWYgfSlcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBkZXZpY2VTdGF0ZSA9IHVzZUdldFJ1bGVzKHN0YXRlLCBkZXZpY2UpXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VNZXRyaWNzKGRldmljZVN0YXRlKVxuXG4gIHNldChkZXZpY2VTdGF0ZSwgJ2J1dHRvbi5wZXJjZW50X3dpZHRoJywgZGV2aWNlU3RhdGU/LmJ1dHRvbj8ud2lkdGgpXG4gIHNldChkZXZpY2VTdGF0ZSwgJ2xlZ2FsLnBlcmNlbnRfd2lkdGgnLCBkZXZpY2VTdGF0ZT8ubGVnYWw/LndpZHRoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG5cblxuICBjb25zdCBib2R5UnVsZXMgPSB7XG4gICAgYWxpZ25JdGVtczogc3dpdGNoVGV4dEFsaWduVG9GbGV4KHJ1bGVzLnJvb3Q/LmFsaWduKVxuICB9XG5cbiAgY29uc3QgYnV0dG9uUnVsZXMgPSB7XG4gICAgLi4ucnVsZXM/LmJ1dHRvbixcbiAgICBqdXN0aWZ5Q29udGVudDogc3dpdGNoVGV4dEFsaWduVG9GbGV4KHJ1bGVzLnJvb3Q/LnRleHRBbGlnbilcbiAgfVxuXG4gIGNvbnN0IGxlZ2FsUnVsZXMgPSB7XG4gICAgLi4ucnVsZXM/LmxlZ2FsLFxuICAgIGp1c3RpZnlDb250ZW50OiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8udGV4dEFsaWduKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgcmVmPXtyb290UmVmfVxuICAgICAgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9XG4gICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgIHJlbD1cIm5vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnLFxuICAgICAgICBbc3R5bGVzLnRhYmxldF06IGRldmljZSA9PT0gJ3RhYmxldCcsXG4gICAgICAgIFtzdHlsZXMubGFwdG9wXTogZGV2aWNlID09PSAnbGFwdG9wJ1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17cnVsZXMucm9vdH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fSBzdHlsZT17Ym9keVJ1bGVzfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30vPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRleHR9PlxuICAgICAgICAgIHsocnVsZXM/LmNoaWxkcmVuIHx8IFtdKS5tYXAoZWwgPT4gKFxuICAgICAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17ZWx9PlxuICAgICAgICAgICAgICA8TGluZSAvPlxuICAgICAgICAgICAgPC9TdGF0ZUNvbnRleHQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e2J1dHRvblJ1bGVzfT5cbiAgICAgICAgICB7YnV0dG9uUnVsZXM/LmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbH0gc3R5bGU9e2xlZ2FsUnVsZXN9PlxuICAgICAgICAgIHtsZWdhbFJ1bGVzPy5jaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2E+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxTaW1wbGVQb3B1cCAvPilcbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyBvbWl0LCBwaWNrIH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCBEaXNwbGF5VGV4dCBmcm9tICdzcmMvY29tcG9uZW50cy9EaXNwbGF5VGV4dCdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCB7IHNwYWNpbmdPcHRpb25zIH0gZnJvbSBcInNyYy9oZWxwZXJzL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgdXNlTWV0cmljcyB9IGZyb20gXCJzcmMvaG9va3MvdXNlTWV0cmljc1wiO1xuXG5jb25zdCBCb251czogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuICBjb25zdCBkZXZpY2UgPSBzdGF0ZT8uZGV2aWNlIHx8ICdkZXNrdG9wJ1xuICBjb25zdCBvbkNsaWNrID0gdXNlTWV0cmljcyhzdGF0ZSlcblxuXG4gIHJldHVybiAoXG4gICAgPGFcbiAgICAgIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfVxuICAgICAgdGFyZ2V0PSdfYmxhbmsnXG4gICAgICByZWw9XCJub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBkZXZpY2UgPT09ICdkZXNrdG9wJ1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17b21pdChydWxlcy5yb290LCAuLi5zcGFjaW5nT3B0aW9ucyl9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyfSBzdHlsZT17cnVsZXMuaGVhZGVyfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9IHN0eWxlPXtwaWNrKHJ1bGVzLnJvb3QsIC4uLnNwYWNpbmdPcHRpb25zKX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9keX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfT48L2Rpdj5cbiAgICAgICAgICA8RGlzcGxheVRleHQgY2xhc3NOYW1lPXtzdHlsZXMudGV4dH0gc3R5bGU9e3J1bGVzLnRleHR9PlxuICAgICAgICAgICAge3J1bGVzLnRleHQ/LmNoaWxkcmVufVxuICAgICAgICAgIDwvRGlzcGxheVRleHQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9ufSBzdHlsZT17cnVsZXMuYnV0dG9ufT5cbiAgICAgICAgICAgIHtydWxlcy5idXR0b24/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVnYWx9IHN0eWxlPXtydWxlcy5sZWdhbH0+XG4gICAgICAgICAgICB7cnVsZXMubGVnYWw/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYT5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBCb251c1xuIiwiaW1wb3J0IHsgRkMsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0ICdzcmMvaGVscGVycy9yZXNldC5zY3NzJ1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgQm9udXMgZnJvbSAnLi9jb21wb25lbnRzL0JvbnVzJ1xuaW1wb3J0IHsgdXNlRXh0cmFjdEZvbnRzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUV4dHJhY3RGb250cydcblxuY29uc3QgU2ltcGxlUG9wdXA6IEZDID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IGRldmljZSA9IHVzZUNvbnRhaW5lckRldmljZSh7IHRhcmdldFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuICB1c2VFeHRyYWN0Rm9udHMoZGV2aWNlU3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e3Jvb3RSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCdcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e3J1bGVzLnJvb3R9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50aXRsZX0gc3R5bGU9e3J1bGVzLnRpdGxlfT5cbiAgICAgICAge3J1bGVzLnRpdGxlPy5jaGlsZHJlbn1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy53cmFwcGVyfT5cbiAgICAgICAgeyhydWxlcy5jaGlsZHJlbiB8fCBbXSkubWFwKGNoaWxkID0+IChcbiAgICAgICAgICA8U3RhdGVDb250ZXh0IHZhbHVlPXt7IC4uLmNoaWxkLCBkZXZpY2UgfX0+XG4gICAgICAgICAgICA8Qm9udXMgLz5cbiAgICAgICAgICA8L1N0YXRlQ29udGV4dD5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPFNpbXBsZVBvcHVwIC8+KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuXG5jb25zdCBNYXRjaDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuICBjb25zdCBkZXZpY2UgPSBzdGF0ZT8uZGV2aWNlIHx8ICdkZXNrdG9wJ1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnXG4gICAgfSl9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWZ0fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtc30+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9keX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWFndWV9IHN0eWxlPXtydWxlcy5sZWFndWV9PntydWxlcy5sZWFndWU/LmNoaWxkcmVufTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubmFtZX0gc3R5bGU9e3J1bGVzLnRlYW1zfT57cnVsZXMudGVhbXM/LnRlYW1BfSDigJQge3J1bGVzLnRlYW1zPy50ZWFtQn08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucmlnaHR9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbUxvZ299IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTmFtZX0gc3R5bGU9e3J1bGVzLnRlYW1zfT57cnVsZXMudGVhbXM/LnRlYW1BfTwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGRMYWJlbH0gc3R5bGU9e3J1bGVzLm9kZExhYmVsfT57cnVsZXMub2RkTGFiZWw/LmNoaWxkcmVufTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkVmFsdWV9IHN0eWxlPXtydWxlcy5vZGRWYWx1ZX0+e3J1bGVzLm9kZFZhbHVlPy5jaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1Mb2dvfS8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTmFtZX0gc3R5bGU9e3J1bGVzLnRlYW1zfT57cnVsZXMudGVhbXM/LnRlYW1CfTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1hdGNoXG4iLCJpbXBvcnQgeyBGQywgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyBzZXQgfSBmcm9tICdAYWRzdG9yZS91dGlscydcbmltcG9ydCAnc3JjL2hlbHBlcnMvcmVzZXQuc2NzcydcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDb250YWluZXJEZXZpY2UgfSBmcm9tICdzcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZUdldFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZURldmljZVN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICdzcmMvU3RhdGVDb250ZXh0J1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuaW1wb3J0IHsgc3dpdGNoVGV4dEFsaWduVG9GbGV4IH0gZnJvbSAnc3JjL2hlbHBlcnMvc3dpdGNoVGV4dEFsaWduVG9GbGV4J1xuaW1wb3J0IE1hdGNoIGZyb20gJy4vY29tcG9uZW50cy9NYXRjaCdcbmltcG9ydCB7IHVzZU1ldHJpY3MgfSBmcm9tICdzcmMvaG9va3MvdXNlTWV0cmljcydcblxuY29uc3QgU2ltcGxlUG9wdXA6IEZDID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IGRldmljZSA9IHVzZUNvbnRhaW5lckRldmljZSh7IHRhcmdldFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgc2V0KGRldmljZVN0YXRlLCAnYnV0dG9uV3JhcHBlci5wZXJjZW50X3dpZHRoJywgZGV2aWNlU3RhdGU/LmJ1dHRvbldyYXBwZXI/LndpZHRoKVxuICBzZXQoZGV2aWNlU3RhdGUsICdsZWdhbC5wZXJjZW50X3dpZHRoJywgZGV2aWNlU3RhdGU/LmxlZ2FsPy53aWR0aClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuICBjb25zdCBvbkNsaWNrID0gdXNlTWV0cmljcyhkZXZpY2VTdGF0ZSlcblxuICBjb25zdCBib2R5UnVsZXMgPSB7XG4gICAgLi4ucnVsZXMucm9vdCxcbiAgICBhbGlnbkl0ZW1zOiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8uYWxpZ24pXG4gIH1cblxuICBjb25zdCBjb250ZW50UnVsZXMgPSB7XG4gICAgLi4ucnVsZXMuY29udGVudCxcbiAgICBhbGlnbkl0ZW1zOiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8uYWxpZ24pXG4gIH1cblxuICBjb25zdCB0ZXh0UnVsZXMgPSB7XG4gICAgLi4ucnVsZXMudGV4dCxcbiAgICB0ZXh0QWxpZ246IHJ1bGVzLnJvb3Q/LmFsaWduXG4gIH1cblxuICBjb25zdCBidXR0b25SdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8uYnV0dG9uLFxuICAgIGp1c3RpZnlDb250ZW50OiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8udGV4dEFsaWduKVxuICB9XG5cbiAgY29uc3QgbGVnYWxSdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8ubGVnYWwsXG4gICAganVzdGlmeUNvbnRlbnQ6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py50ZXh0QWxpZ24pXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICByZWY9e3Jvb3RSZWZ9XG4gICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgcmVsPSdub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyJ1xuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnLFxuICAgICAgICBbc3R5bGVzLmxhcHRvcF06IGRldmljZSA9PT0gJ2xhcHRvcCcsXG4gICAgICAgIFtzdHlsZXMudGFibGV0XTogZGV2aWNlID09PSAndGFibGV0J1xuICAgICAgfSl9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9keX0gc3R5bGU9e2JvZHlSdWxlc30+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50aXRsZX0gc3R5bGU9e3J1bGVzLnRpdGxlfT5cbiAgICAgICAgICAgIHtydWxlcy50aXRsZT8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMud3JhcHBlcn0gc3R5bGU9e2NvbnRlbnRSdWxlc30+XG4gICAgICAgICAgeyhydWxlcy5jaGlsZHJlbiB8fCBbXSkubWFwKGNoaWxkID0+IChcbiAgICAgICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e3sgLi4uY2hpbGQsIGRldmljZSB9fT5cbiAgICAgICAgICAgICAgPE1hdGNoIC8+XG4gICAgICAgICAgICA8L1N0YXRlQ29udGV4dD5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPERpc3BsYXlUZXh0IGNsYXNzTmFtZT17c3R5bGVzLnRleHR9IHN0eWxlPXt0ZXh0UnVsZXN9PlxuICAgICAgICAgIHtydWxlcy50ZXh0Py5jaGlsZHJlbn1cbiAgICAgICAgPC9EaXNwbGF5VGV4dD5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b259IHN0eWxlPXtydWxlcy5idXR0b25XcmFwcGVyfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbkhlYWR9IHN0eWxlPXtydWxlcy5idXR0b25IZWFkfT5cbiAgICAgICAgICAgIHtydWxlcy5idXR0b25IZWFkPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvblRhcmdldH0gc3R5bGU9e2J1dHRvblJ1bGVzfT5cbiAgICAgICAgICAgIHtydWxlcy5idXR0b24/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbH0gc3R5bGU9e2xlZ2FsUnVsZXN9PlxuICAgICAgICAgIHtydWxlcy5sZWdhbD8uY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9hPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8U2ltcGxlUG9wdXAgLz4pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgeyB1c2VUb2dnbGUgfSBmcm9tICdzcmMvaG9va3MvdXNlVG9nZ2xlJ1xuaW1wb3J0IHsgdXNlTWV0cmljcyB9IGZyb20gJ3NyYy9ob29rcy91c2VNZXRyaWNzJ1xuXG5jb25zdCBCb251czogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuICBjb25zdCBbaXNPcGVuLCB0b2dnbGVJc09wZW5dID0gdXNlVG9nZ2xlKClcbiAgY29uc3Qgb25DbGljayA9IHVzZU1ldHJpY3Moc3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJvb3R9IHN0eWxlPXtydWxlcy5yb290fT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYmFja2dyb3VuZH0gc3R5bGU9e3J1bGVzLmJhY2tncm91bmR9IC8+XG4gICAgICA8YVxuICAgICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgICAgdGFyZ2V0PSdfYmxhbmsnXG4gICAgICAgIHJlbD0nbm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlcidcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuYm9keX1cbiAgICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgID5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJvd0ZpcnN0fSBzdHlsZT17cnVsZXMucm93Rmlyc3R9PlxuICAgICAgICAgICAge3J1bGVzLnJvd0ZpcnN0Py5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJvd1NlY29uZH0gc3R5bGU9e3J1bGVzLnJvd1NlY29uZH0+XG4gICAgICAgICAgICB7cnVsZXMucm93U2Vjb25kPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvb2ttYWtlcn0+d2lubGluZTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b259IHN0eWxlPXtydWxlcy5idXR0b259PlxuICAgICAgICAgIHtydWxlcy5idXR0b24/LmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvYT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5sZWdhbCwge1xuICAgICAgICAgIFtzdHlsZXMubGVnYWxPcGVuXTogaXNPcGVuXG4gICAgICAgIH0pfVxuICAgICAgICBzdHlsZT17cnVsZXMubGVnYWxJbmZvfVxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbFRleHR9PlxuICAgICAgICAgIDxzcGFuPntydWxlcy5sZWdhbEluZm8/LmNoaWxkcmVufTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbEJ1dHRvbn0gc3R5bGU9e3J1bGVzLmxlZ2FsSW5mb0J1dHRvbn0gb25DbGljaz17dG9nZ2xlSXNPcGVufT5cbiAgICAgICAgICAgIHtpc09wZW4gPyBydWxlcy5sZWdhbEluZm9CdXR0b24/Lm9wZW5UZXh0IDogcnVsZXMubGVnYWxJbmZvQnV0dG9uPy5jbG9zZVRleHR9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBCb251c1xuIiwiaW1wb3J0IHsgRkMsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgQm9udXMgZnJvbSAnLi9jb21wb25lbnRzL0JvbnVzJ1xuXG5jb25zdCBCb251c0NhcmQ6IEZDID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlID0gJ2Rlc2t0b3AnXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e3Jvb3RSZWZ9PlxuICAgICAgeyhydWxlcz8uY2hpbGRyZW4gfHwgW10pLm1hcChjaGlsZCA9PiAoXG4gICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e2NoaWxkfT5cbiAgICAgICAgICA8Qm9udXMgLz5cbiAgICAgICAgPC9TdGF0ZUNvbnRleHQ+XG4gICAgICApKX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPEJvbnVzQ2FyZCAvPilcbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyBvbWl0IH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCB7IGJhY2tncm91bmRPcHRpb25zIH0gZnJvbSBcInNyYy9oZWxwZXJzL2NvbnN0YW50c1wiO1xuXG5jb25zdCBUZXh0OiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogc3RhdGU/LmRldmljZSA9PT0gJ2Rlc2t0b3AnXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtvbWl0KHJ1bGVzLnJvb3QsIC4uLmJhY2tncm91bmRPcHRpb25zKX1cbiAgICA+XG4gICAgICB7cnVsZXMucm9vdD8uY2hpbGRyZW59XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGV4dFxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IG9taXQgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgYmFja2dyb3VuZE9wdGlvbnMgfSBmcm9tIFwic3JjL2hlbHBlcnMvY29uc3RhbnRzXCI7XG5cbmNvbnN0IE1hdGNoZXM6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcblxuICBjb25zdCByb290UnVsZXMgPSBvbWl0KHJ1bGVzLnJvb3QsIC4uLmJhY2tncm91bmRPcHRpb25zKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yb290fT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGRMb2dvfSBzdHlsZT17cm9vdFJ1bGVzfSAvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExhYmVsfSBzdHlsZT17cm9vdFJ1bGVzfT57cnVsZXMucm9vdD8udmFsdWVPbmV9PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29lZn0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29lZkhlYWR9IHN0eWxlPXtydWxlcy5jb2VmfT5YPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29lZlZhbHVlfSBzdHlsZT17cm9vdFJ1bGVzfT57cnVsZXMucm9vdD8udmFsdWVYfTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMub2RkLCBzdHlsZXMub2RkUmV2ZXJzZSl9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExvZ299IHN0eWxlPXtyb290UnVsZXN9Lz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGRMYWJlbH0gc3R5bGU9e3Jvb3RSdWxlc30+e3J1bGVzLnJvb3Q/LnZhbHVlVHdvfTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWF0Y2hlc1xuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IG9taXQgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgYmFja2dyb3VuZE9wdGlvbnMgfSBmcm9tIFwic3JjL2hlbHBlcnMvY29uc3RhbnRzXCI7XG5cbmNvbnN0IE1hdGNoZXNPbmVUd286IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBzdGF0ZT8uZGV2aWNlID09PSAnZGVza3RvcCcsXG4gICAgICAgIFtzdHlsZXMubGFwdG9wXTogc3RhdGU/LmRldmljZSA9PT0gJ2xhcHRvcCcsXG4gICAgICAgIFtzdHlsZXMudGFibGV0XTogc3RhdGU/LmRldmljZSA9PT0gJ3RhYmxldCdcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e29taXQocnVsZXMucm9vdCwgLi4uYmFja2dyb3VuZE9wdGlvbnMpfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGl0bGV9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRpdGxlTGFiZWx9IHN0eWxlPXtydWxlcy50aXRsZUxhYmVsfT5cbiAgICAgICAgICB7cnVsZXMudGl0bGVMYWJlbC5jaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGl0bGVWYWx1ZX0gc3R5bGU9e3J1bGVzLnRpdGxlVmFsdWV9PlxuICAgICAgICAgIHtydWxlcy50aXRsZVZhbHVlLmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1Mb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1OYW1lfSBzdHlsZT17cnVsZXMudGVhbU5hbWV9PlxuICAgICAgICAgICAge3J1bGVzLnRlYW0xTmFtZS5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1WYWx1ZX0gc3R5bGU9e3J1bGVzLnZhbHVlfT5cbiAgICAgICAgICAgIHtydWxlcy52YWx1ZTEuY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbUxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbU5hbWV9IHN0eWxlPXtydWxlcy50ZWFtTmFtZX0+XG4gICAgICAgICAgICB7cnVsZXMudGVhbTJOYW1lLmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbVZhbHVlfSBzdHlsZT17cnVsZXMudmFsdWV9PlxuICAgICAgICAgICAge3J1bGVzLnZhbHVlMi5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYXRjaGVzT25lVHdvXG4iLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcblxuaW50ZXJmYWNlIFNsaWRlIHtcbiAgYW5pbWF0aW9uRHVyYXRpb246IG51bWJlclxufVxuXG5jb25zdCB1c2VBbmltYXRlZExpc3QgPSAoc2xpZGVzOiBTbGlkZVtdID0gW10pID0+IHtcbiAgY29uc3QgaXRlbXNDb3VudCA9IHNsaWRlcy5sZW5ndGhcbiAgY29uc3QgW2FuaW1hdGVkSWR4LCBzZXRBbmltYXRlZElkeF0gPSB1c2VTdGF0ZTxudW1iZXI+KDApXG4gIGNvbnN0IGFuaW1hdGlvbkR1cmF0aW9uID0gc2xpZGVzW2FuaW1hdGVkSWR4IHx8IDBdPy5hbmltYXRpb25EdXJhdGlvblxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZ29OZXh0ID0gKCkgPT4ge1xuICAgICAgc2V0QW5pbWF0ZWRJZHgoaW5kZXggPT4ge1xuICAgICAgICBpZiAoaW5kZXggKyAxIDwgaXRlbXNDb3VudCkgcmV0dXJuIGluZGV4ICsgMVxuICAgICAgICByZXR1cm4gMFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dChnb05leHQsIGFuaW1hdGlvbkR1cmF0aW9uKVxuXG4gICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lb3V0KVxuICB9LCBbc2V0QW5pbWF0ZWRJZHgsIGl0ZW1zQ291bnQsIGFuaW1hdGlvbkR1cmF0aW9uLCBhbmltYXRlZElkeF0pXG5cbiAgcmV0dXJuIGFuaW1hdGVkSWR4XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVzZUFuaW1hdGVkTGlzdFxuIiwiaW1wb3J0IHsgRkMsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgcGljayB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZUdldFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZURldmljZVN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICdzcmMvU3RhdGVDb250ZXh0J1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCBUZXh0IGZyb20gJy4vY29tcG9uZW50cy9UZXh0J1xuaW1wb3J0IE1hdGNoZXMgZnJvbSAnLi9jb21wb25lbnRzL01hdGNoZXMnXG5pbXBvcnQgTWF0Y2hlc09uZVR3byBmcm9tICcuL2NvbXBvbmVudHMvTWF0Y2hlc09uZVR3bydcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgdXNlQW5pbWF0ZWRMaXN0IGZyb20gJ3NyYy9ob29rcy91c2VBbmltYXRlZExpc3QnXG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZU1ldHJpY3MnXG5pbXBvcnQgeyBiYWNrZ3JvdW5kT3B0aW9ucyB9IGZyb20gJ3NyYy9oZWxwZXJzL2NvbnN0YW50cydcblxuY29uc3QgREVGQVVMVF9BTklNQVRJT05fU1BFRUQgPSAzNzAwXG5cbmNvbnN0IFdpZGVDYXJkOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgcm9vdFJlZiA9IHVzZVJlZihudWxsKVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IGRldmljZSA9IHVzZUNvbnRhaW5lckRldmljZSh7IHRhcmdldFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBkZXZpY2VTdGF0ZSA9IHVzZUdldFJ1bGVzKHN0YXRlLCBkZXZpY2UpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcbiAgY29uc3Qgb25DbGljayA9IHVzZU1ldHJpY3MoZGV2aWNlU3RhdGUpXG5cbiAgY29uc3QgZ2V0Q2hpbGQgPSAobmFtZTogc3RyaW5nKSA9PlxuICAgICh7XG4gICAgICB0ZXh0OiA8VGV4dCAvPixcbiAgICAgIG1hdGNoZXM6IDxNYXRjaGVzIC8+LFxuICAgICAgbWF0Y2hlc09uZVR3bzogPE1hdGNoZXNPbmVUd28gLz5cbiAgICB9W25hbWVdKVxuXG4gIGNvbnN0IHNsaWRlc0xpc3QgPSAocnVsZXMuY2hpbGRyZW4gfHwgW10pLmZpbHRlcihCb29sZWFuKS5tYXAoc2xpZGUgPT4gKHtcbiAgICAuLi5zbGlkZSxcbiAgICBhbmltYXRpb25OYW1lOiBzbGlkZT8ucm9vdD8uYW5pbWF0aW9uTmFtZSxcbiAgICBhbmltYXRpb25EdXJhdGlvbjogc2xpZGU/LnJvb3Q/LmFuaW1hdGlvbkR1cmF0aW9uIHx8IERFRkFVTFRfQU5JTUFUSU9OX1NQRUVEXG4gIH0pKVxuXG4gIGNvbnN0IGN1cnJlbnRTbGlkZSA9IHVzZUFuaW1hdGVkTGlzdChzbGlkZXNMaXN0KVxuICBjb25zdCBzbGlkZVJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzbGlkZXNMaXN0W2N1cnJlbnRTbGlkZV0gfHwge30pXG5cbiAgY29uc3QgYmFja2dyb3VuZFJ1bGVzID0gc2xpZGVSdWxlcz8ucm9vdD8uaGFzQ3VzdG9tQmFja2dyb3VuZFxuICAgID8gcGljayhzbGlkZVJ1bGVzPy5yb290IHx8IHt9LCAuLi5iYWNrZ3JvdW5kT3B0aW9ucylcbiAgICA6IHBpY2socnVsZXMuYmFja2dyb3VuZCwgLi4uYmFja2dyb3VuZE9wdGlvbnMpXG5cbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgcmVmPXtyb290UmVmfVxuICAgICAgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9XG4gICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgIHJlbD0nbm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlcidcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBkZXZpY2UgPT09ICdkZXNrdG9wJyxcbiAgICAgICAgW3N0eWxlcy5sYXB0b3BdOiBkZXZpY2UgPT09ICdsYXB0b3AnLFxuICAgICAgICBbc3R5bGVzLnRhYmxldF06IGRldmljZSA9PT0gJ3RhYmxldCcsXG4gICAgICAgIFtzdHlsZXMudmFyaWFudDJdOiBydWxlcy5yb290Py52YXJpYW50ID09PSAndmFyaWFudDInXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtydWxlcy5yb290fVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJhY2tncm91bmR9IHN0eWxlPXtiYWNrZ3JvdW5kUnVsZXN9IC8+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnByb21vdGlvbn0gc3R5bGU9e3J1bGVzLnByb21vdGlvbn0+XG4gICAgICAgIHtydWxlcy5wcm9tb3Rpb24/LmNoaWxkcmVufVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGVudH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVmdH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY2VudGVyfT5cbiAgICAgICAgICB7KHJ1bGVzLmNoaWxkcmVuIHx8IFtdKS5tYXAoKGNoaWxkLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5zbGlkZX1cbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBhbmltYXRpb25OYW1lOiBjdXJyZW50U2xpZGUgPT09IGluZGV4ID8gc3R5bGVzW2NoaWxkLnJvb3Q/LmFuaW1hdGlvbk5hbWUgfHwgJ2ZhZGUtaW4tb3V0J10gOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246IGAke2NoaWxkLnJvb3Q/LmFuaW1hdGlvbkR1cmF0aW9ufW1zYFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8U3RhdGVDb250ZXh0IHZhbHVlPXt7IC4uLmNoaWxkLCBkZXZpY2UgfX0+e2dldENoaWxkKGNoaWxkLm5hbWUpfTwvU3RhdGVDb250ZXh0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJpZ2h0fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b25XcmFwcGVyfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9ufSBzdHlsZT17cnVsZXMuYnV0dG9ufT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgICAgICAge3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2E+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxXaWRlQ2FyZCAvPilcbiIsImltcG9ydCB7IENhbGxiYWNrLCBkZXZpY2VzIGFzIGRldmljZXNMaXN0LCBnZXQgfSBmcm9tICdAYWRzdG9yZS91dGlscydcbmltcG9ydCB7IEFueVN0YXRlIH0gZnJvbSAnc3JjL3Byb21vcy9TaW1wbGVHaWZ0L3R5cGVzJ1xuXG5jb25zdCBtb2RpZnlTdGF0ZSA9IChcbiAgc3RhdGU6IEFueVN0YXRlLFxuICBsYXllcjogc3RyaW5nLFxuICBydWxlOiBzdHJpbmcsXG4gIHZhbHVlOiB1bmtub3duIHwgQ2FsbGJhY2s8W3ByZXZWYWx1ZTogdW5rbm93bl0+LFxuICBkZXZpY2VzID0gZGV2aWNlc0xpc3RcbikgPT4ge1xuICBjb25zdCBuZXdTdGF0ZSA9IHsgLi4uc3RhdGUgfVxuXG4gIGRldmljZXMuZm9yRWFjaChkZXZpY2UgPT4ge1xuICAgIG5ld1N0YXRlW2xheWVyXSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlW2xheWVyXSxcbiAgICAgIFtkZXZpY2VdOiB7XG4gICAgICAgIC4uLm5ld1N0YXRlW2xheWVyXVtkZXZpY2VdLFxuICAgICAgICBbcnVsZV06IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlKGdldChuZXdTdGF0ZSwgYCR7bGF5ZXJ9LiR7ZGV2aWNlfS4ke3J1bGV9YCkpIDogdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH0pXG4gIHJldHVybiBuZXdTdGF0ZVxufVxuXG5leHBvcnQgeyBtb2RpZnlTdGF0ZSB9XG4iXSwibmFtZXMiOlsiY2xhc3NOYW1lcyIsImkiLCJpbm5lciIsIm1vZHVsZSIsIm8iLCJuIiwidCIsInUiLCJCIiwiciIsImYiLCJjIiwiZSIsIl8iLCJGIiwicSIsInciLCJnIiwibCIsInVzZUdpZnRPcGVuIiwiZGVsYXkiLCJpc09wZW4iLCJzZXRJc09wZW4iLCJ1c2VTdGF0ZSIsInRpbWVyUmVmIiwidXNlUmVmIiwib25Ub2dnbGUiLCJjbGVhclRpbWVvdXQiLCJjdXJyZW50IiwicHJldiIsInVzZUVmZmVjdCIsInNldFRpbWVvdXQiLCJzIiwiYSIsIlN0YXRlIiwiY3JlYXRlQ29udGV4dCIsIlN0YXRlQ29udGV4dCIsImNoaWxkcmVuIiwidmFsdWUiLCJfanN4IiwiUHJvdmlkZXIiLCJyZW5kZXIiLCJ2Tm9kZSIsInRhcmdldCIsInN0YXRlIiwicHJlYWN0UmVuZGVyIiwidXNlQ3VycmVudFN0YXRlIiwidXNlQ29udGV4dCIsImxpc3RDYWNoZUNsZWFyIiwiZXEiLCJyZXF1aXJlJCQwIiwiYXNzb2NJbmRleE9mIiwibGlzdENhY2hlRGVsZXRlIiwiaW5kZXgiLCJsaXN0Q2FjaGVHZXQiLCJsaXN0Q2FjaGVIYXMiLCJsaXN0Q2FjaGVTZXQiLCJyZXF1aXJlJCQxIiwicmVxdWlyZSQkMiIsInJlcXVpcmUkJDMiLCJyZXF1aXJlJCQ0IiwiTGlzdENhY2hlIiwic3RhY2tDbGVhciIsInN0YWNrRGVsZXRlIiwic3RhY2tHZXQiLCJzdGFja0hhcyIsImZyZWVHbG9iYWwiLCJnbG9iYWwiLCJyb290IiwiU3ltYm9sIiwib2JqZWN0UHJvdG8iLCJoYXNPd25Qcm9wZXJ0eSIsIm5hdGl2ZU9iamVjdFRvU3RyaW5nIiwic3ltVG9TdHJpbmdUYWciLCJnZXRSYXdUYWciLCJvYmplY3RUb1N0cmluZyIsImJhc2VHZXRUYWciLCJpc09iamVjdCIsImZ1bmNUYWciLCJpc0Z1bmN0aW9uIiwiY29yZUpzRGF0YSIsImlzTWFza2VkIiwiZnVuY1Byb3RvIiwiZnVuY1RvU3RyaW5nIiwidG9Tb3VyY2UiLCJiYXNlSXNOYXRpdmUiLCJnZXRWYWx1ZSIsImdldE5hdGl2ZSIsIk1hcCIsIm5hdGl2ZUNyZWF0ZSIsImhhc2hDbGVhciIsImhhc2hEZWxldGUiLCJIQVNIX1VOREVGSU5FRCIsImhhc2hHZXQiLCJoYXNoSGFzIiwiaGFzaFNldCIsIkhhc2giLCJtYXBDYWNoZUNsZWFyIiwiaXNLZXlhYmxlIiwiZ2V0TWFwRGF0YSIsIm1hcENhY2hlRGVsZXRlIiwibWFwQ2FjaGVHZXQiLCJtYXBDYWNoZUhhcyIsIm1hcENhY2hlU2V0IiwiTWFwQ2FjaGUiLCJzdGFja1NldCIsInJlcXVpcmUkJDUiLCJTdGFjayIsImRlZmluZVByb3BlcnR5IiwiYmFzZUFzc2lnblZhbHVlIiwiYXNzaWduTWVyZ2VWYWx1ZSIsImNyZWF0ZUJhc2VGb3IiLCJiYXNlRm9yIiwiZXhwb3J0cyIsImNsb25lQnVmZmVyIiwiVWludDhBcnJheSIsImNsb25lQXJyYXlCdWZmZXIiLCJjbG9uZVR5cGVkQXJyYXkiLCJjb3B5QXJyYXkiLCJiYXNlQ3JlYXRlIiwib3ZlckFyZyIsImdldFByb3RvdHlwZSIsImlzUHJvdG90eXBlIiwiaW5pdENsb25lT2JqZWN0IiwiaXNPYmplY3RMaWtlIiwiYXJnc1RhZyIsImJhc2VJc0FyZ3VtZW50cyIsImlzQXJndW1lbnRzIiwiaXNBcnJheSIsIk1BWF9TQUZFX0lOVEVHRVIiLCJpc0xlbmd0aCIsImlzQXJyYXlMaWtlIiwiaXNBcnJheUxpa2VPYmplY3QiLCJzdHViRmFsc2UiLCJpc0J1ZmZlciIsIm9iamVjdFRhZyIsImlzUGxhaW5PYmplY3QiLCJiYXNlSXNUeXBlZEFycmF5IiwiYmFzZVVuYXJ5Iiwibm9kZVV0aWwiLCJpc1R5cGVkQXJyYXkiLCJzYWZlR2V0IiwiYXNzaWduVmFsdWUiLCJjb3B5T2JqZWN0IiwiYmFzZVRpbWVzIiwiaXNJbmRleCIsImFycmF5TGlrZUtleXMiLCJuYXRpdmVLZXlzSW4iLCJiYXNlS2V5c0luIiwia2V5c0luIiwidG9QbGFpbk9iamVjdCIsInJlcXVpcmUkJDYiLCJyZXF1aXJlJCQ3IiwicmVxdWlyZSQkOCIsInJlcXVpcmUkJDkiLCJyZXF1aXJlJCQxMCIsInJlcXVpcmUkJDExIiwicmVxdWlyZSQkMTIiLCJyZXF1aXJlJCQxMyIsInJlcXVpcmUkJDE0IiwiYmFzZU1lcmdlRGVlcCIsImJhc2VNZXJnZSIsImlkZW50aXR5IiwiYXBwbHkiLCJvdmVyUmVzdCIsImNvbnN0YW50IiwiYmFzZVNldFRvU3RyaW5nIiwic2hvcnRPdXQiLCJzZXRUb1N0cmluZyIsImJhc2VSZXN0IiwiaXNJdGVyYXRlZUNhbGwiLCJjcmVhdGVBc3NpZ25lciIsImluamVjdExpbmsiLCJvcHRpb25zIiwiaGVhZCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJsaW5rIiwiY3JlYXRlRWxlbWVudCIsIk9iamVjdCIsImVudHJpZXMiLCJmb3JFYWNoIiwia2V5Iiwic2V0QXR0cmlidXRlIiwiYXBwZW5kQ2hpbGQiLCJpdGVyYXRvciIsImlucHV0IiwidmlzaXRvciIsIkFycmF5IiwibWFwIiwiZWwiLCJyZWR1Y2UiLCJhY2MiLCJpc0VtcHR5VmFsdWUiLCJ1bmRlZmluZWQiLCJpc1ZhbHVlIiwicGljayIsIm9iaiIsInByb3BzIiwicmVzdWx0IiwicHJvcCIsIm9taXQiLCJnZXQiLCJwYXRoIiwiZGVmVmFsdWUiLCJwYXRoQXJyYXkiLCJtYXRjaCIsInByZXZPYmoiLCJzZXQiLCJsZW5ndGgiLCJoZXhUb1JnYiIsImhleCIsImNoYXJzIiwic2xpY2UiLCJzcGxpdCIsInZhbCIsImpvaW4iLCJleGVjIiwicGFyc2VJbnQiLCJiIiwiaXNKc29uU2FtZSIsInZhbHVlcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJldmVyeSIsImFyciIsInJnYlRvUmdiYSIsInJnYiIsImFscGhhIiwicmVwbGFjZSIsImRldmljZXMiLCJCUkVBS1BPSU5UUyIsIm1vYmlsZSIsInRhYmxldCIsImxhcHRvcCIsImRlc2t0b3AiLCJpc1ZhbGlkTGF5ZXIiLCJkZXZpY2UiLCJnZXRSdWxlcyIsIl9rZXkiLCJyZXN1bHRSdWxlcyIsInBhcmVudCIsInVzZUdldFJ1bGVzIiwidXNlQ29udGFpbmVyRGV2aWNlIiwidGFyZ2V0UmVmIiwicGFyZW50S2V5IiwiYnJlYWtwb2ludHMiLCJzZXREZXZpY2UiLCJjaGVja0RldmljZSIsInBhcmVudFdpZHRoIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwid2lkdGgiLCJzb3J0ZWRCcmVha3BvaW50cyIsInNvcnQiLCJfMSIsInZhbHVlQSIsIl8yIiwidmFsdWVCIiwiZmluZERldmljZSIsImZpbmQiLCJuZXh0VmFsdWUiLCJ1c2VMYXlvdXRFZmZlY3QiLCJwYXJlbnRFbGVtZW50IiwiY2xvc2VzdCIsInJlc2l6ZU9ic2VydmVyIiwiUmVzaXplT2JzZXJ2ZXIiLCJvYnNlcnZlIiwid3JhcFRvIiwidW50aWwiLCJ0b1B4Iiwic3RhcnRzV2l0aCIsInRvUGVyY2VudCIsImZvcm1hdFJ1bGUiLCJuZXdLZXkiLCJuZXdWYWx1ZSIsIkRFRkFVTFRfVE9fUFgiLCJwYXJzZVJ1bGVzIiwicnVsZXMiLCJsYXllciIsImtleXMiLCJpbmNsdWRlcyIsIndhcm4iLCJ0eXBvZ3JhcGh5IiwiYWNjZW50VHlwb2dyYXBoeSIsImZvbnRGYW1pbHkiLCJjb2xvciIsImZvbnRTaXplIiwicHJvcEtleSIsInByb3BWYWx1ZSIsImlubmVySFRNTCIsImlubmVyVGV4dCIsImRpc3BsYXkiLCJib3JkZXJTdHlsZSIsImJvcmRlclJhZGl1cyIsImJhY2tncm91bmRTaXplIiwiYmFja2dyb3VuZEltYWdlIiwiYmFja2dyb3VuZFJlcGVhdCIsImJhY2tncm91bmRDb2xvck9wYWNpdHkiLCJiYWNrZ3JvdW5kQ29sb3IiLCJmb250V2VpZ2h0IiwiZm9udFN0eWxlIiwidGV4dERlY29yYXRpb24iLCJpc1ZhbGlkUnVsZSIsInJ1bGUiLCJ1c2VQYXJzZVJ1bGVzIiwiRGlzcGxheVRleHQiLCJyZXN0IiwiZm9ybWF0VmFsdWUiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsIl9faHRtbCIsInVzZVRvZ2dsZSIsIkNsb3NlSWNvbiIsInhtbG5zIiwiaGVpZ2h0Iiwidmlld0JveCIsImQiLCJmaWxsIiwiR2lmdEljb24iLCJmaWxsUnVsZSIsImFuaW1hdGlvbnNNYXAiLCJhbmltYXRpb25zIiwiZmFkZSIsInB1bHNlIiwid2lnZ2xlIiwiZ3JhZGllbnQiLCJ1c2VHaWZ0UnVsZXMiLCJkZXZpY2VTdGF0ZSIsImZ1bGxBbmltYXRpb25zIiwiaGFzSWNvbiIsImljb24iLCJhcnJvd1J1bGVzIiwibGVmdCIsImNvbnRhaW5lciIsImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyV2lkdGgiLCJib3JkZXJUb3BDb2xvciIsImJvcmRlckNvbG9yIiwiYm9yZGVyVG9wU3R5bGUiLCJib3JkZXJMZWZ0V2lkdGgiLCJib3JkZXJMZWZ0Q29sb3IiLCJib3JkZXJMZWZ0U3R5bGUiLCJib2R5UnVsZXMiLCJhbGxBbmltYXRpb25zIiwiYW5pbWF0aW9uIiwiYmFja2dyb3VuZFN0eWxlcyIsImdyYWRpZW50Q29sb3IiLCJiYWNrZ3JvdW5kIiwiaWNvblJ1bGVzIiwiYmFja2dyb3VuZE9wdGlvbnMiLCJzcGFjaW5nT3B0aW9ucyIsIm5vb3BZYU1ldHJpa2EiLCJnb2FsIiwiY29uc29sZSIsImxvZyIsIm5vb3BBZEZveCIsInVzZU1ldHJpY3MiLCJsYXllck5hbWUiLCJzYXZlTWV0cmljcyIsInlhUmVhY2hHb2FsIiwiYWRmb3hSZWFjaEdvYWwiLCJtZXRyaWNzIiwieWFTaG93IiwiYWRmb3hTaG93IiwieWFDbGljayIsImFkZm94Q2xpY2siLCJ1c2VFeHRyYWN0Rm9udHMiLCJmb250cyIsIlNldCIsImFkZCIsImZvbnRMaW5rcyIsInVzZU1lbW8iLCJmcm9tIiwiZm9udCIsInJlbCIsImhyZWYiLCJTaW1wbGVHaWZ0Iiwicm9vdFJlZiIsImxlZ2FsSXNPcGVuIiwidG9nZ2xlTGVnYWxJc09wZW4iLCJvbkNsaWNrIiwic3R5bGVzIiwiZmFkZWluIiwiX2pzeHMiLCJjbGFzc05hbWUiLCJyZWYiLCJzdHlsZSIsImljb25UYXJnZXQiLCJib2R5IiwiYm9keU9wZW4iLCJhcnJvdyIsImNsb3NlIiwib2ZmZXIiLCJsb2dvIiwidGV4dCIsImJ1dHRvbiIsImJ1dHRvbkFuaW1hdGVkIiwiaXNBbmltYXRlZCIsImxlZ2FsIiwibGVnYWxPcGVuIiwibGVnYWxUZXh0IiwibGVnYWxCdXR0b24iLCJidXR0b25PcGVuVGV4dCIsImJ1dHRvbkhpZGVUZXh0IiwiQm9udXNDYXJkIiwidmFyaWFudDIiLCJ2YXJpYW50IiwibGluZSIsImJvZHlJbm5lciIsImJ1dHRvblRleHQiLCJDb21wbGV4R2lmdCIsImhhc1RpdGxlSWNvbiIsInRpdGxlIiwicHJvbW90aW9uIiwiaGVhZEljb24iLCJoZWFkVGl0bGUiLCJjaGlsZCIsInN3aXRjaFRleHRBbGlnblRvRmxleCIsInRleHRBbGlnbiIsImNlbnRlciIsInJpZ2h0IiwiTGluZSIsIlNpbXBsZVBvcHVwIiwiYWxpZ25JdGVtcyIsImFsaWduIiwiYnV0dG9uUnVsZXMiLCJqdXN0aWZ5Q29udGVudCIsImxlZ2FsUnVsZXMiLCJCb251cyIsImhlYWRlciIsIndyYXBwZXIiLCJNYXRjaCIsInRlYW1zIiwibGVhZ3VlIiwibmFtZSIsInRlYW1BIiwidGVhbUIiLCJ0ZWFtIiwidGVhbUxvZ28iLCJ0ZWFtTmFtZSIsIm9kZCIsIm9kZExhYmVsIiwib2RkVmFsdWUiLCJidXR0b25XcmFwcGVyIiwiY29udGVudFJ1bGVzIiwiY29udGVudCIsInRleHRSdWxlcyIsImJ1dHRvbkhlYWQiLCJidXR0b25UYXJnZXQiLCJ0b2dnbGVJc09wZW4iLCJyb3dGaXJzdCIsInJvd1NlY29uZCIsImJvb2ttYWtlciIsImxlZ2FsSW5mbyIsImxlZ2FsSW5mb0J1dHRvbiIsIm9wZW5UZXh0IiwiY2xvc2VUZXh0IiwiVGV4dCIsIk1hdGNoZXMiLCJyb290UnVsZXMiLCJvZGRMb2dvIiwidmFsdWVPbmUiLCJjb2VmIiwiY29lZkhlYWQiLCJjb2VmVmFsdWUiLCJ2YWx1ZVgiLCJvZGRSZXZlcnNlIiwidmFsdWVUd28iLCJNYXRjaGVzT25lVHdvIiwidGl0bGVMYWJlbCIsInRpdGxlVmFsdWUiLCJ0ZWFtMU5hbWUiLCJ0ZWFtVmFsdWUiLCJ2YWx1ZTEiLCJ0ZWFtMk5hbWUiLCJ2YWx1ZTIiLCJ1c2VBbmltYXRlZExpc3QiLCJzbGlkZXMiLCJpdGVtc0NvdW50IiwiYW5pbWF0ZWRJZHgiLCJzZXRBbmltYXRlZElkeCIsImFuaW1hdGlvbkR1cmF0aW9uIiwiZ29OZXh0IiwidGltZW91dCIsIkRFRkFVTFRfQU5JTUFUSU9OX1NQRUVEIiwiV2lkZUNhcmQiLCJnZXRDaGlsZCIsIm1hdGNoZXMiLCJtYXRjaGVzT25lVHdvIiwic2xpZGVzTGlzdCIsImZpbHRlciIsIkJvb2xlYW4iLCJzbGlkZSIsImFuaW1hdGlvbk5hbWUiLCJjdXJyZW50U2xpZGUiLCJzbGlkZVJ1bGVzIiwiYmFja2dyb3VuZFJ1bGVzIiwiaGFzQ3VzdG9tQmFja2dyb3VuZCIsIm1vZGlmeVN0YXRlIiwiZGV2aWNlc0xpc3QiLCJuZXdTdGF0ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPQSxLQUFDLFdBQVk7QUFHWixVQUFJLFNBQVMsQ0FBRSxFQUFDO0FBR2hCLGVBQVNBLGNBQWE7QUFDckIsWUFBSSxVQUFVLENBQUE7QUFFZCxpQkFBU0MsS0FBSSxHQUFHQSxLQUFJLFVBQVUsUUFBUUEsTUFBSztBQUMxQyxjQUFJLE1BQU0sVUFBVUEsRUFBQztBQUNyQixjQUFJLENBQUM7QUFBSztBQUVWLGNBQUksVUFBVSxPQUFPO0FBRXJCLGNBQUksWUFBWSxZQUFZLFlBQVksVUFBVTtBQUNqRCxvQkFBUSxLQUFLLEdBQUc7QUFBQSxVQUNoQixXQUFVLE1BQU0sUUFBUSxHQUFHLEdBQUc7QUFDOUIsZ0JBQUksSUFBSSxRQUFRO0FBQ2Ysa0JBQUlDLFNBQVFGLFlBQVcsTUFBTSxNQUFNLEdBQUc7QUFDdEMsa0JBQUlFLFFBQU87QUFDVix3QkFBUSxLQUFLQSxNQUFLO0FBQUEsY0FDbEI7QUFBQSxZQUNEO0FBQUEsVUFDTCxXQUFjLFlBQVksVUFBVTtBQUNoQyxnQkFBSSxJQUFJLGFBQWEsT0FBTyxVQUFVLFlBQVksQ0FBQyxJQUFJLFNBQVMsU0FBUSxFQUFHLFNBQVMsZUFBZSxHQUFHO0FBQ3JHLHNCQUFRLEtBQUssSUFBSSxTQUFVLENBQUE7QUFDM0I7QUFBQSxZQUNBO0FBRUQscUJBQVMsT0FBTyxLQUFLO0FBQ3BCLGtCQUFJLE9BQU8sS0FBSyxLQUFLLEdBQUcsS0FBSyxJQUFJLEdBQUcsR0FBRztBQUN0Qyx3QkFBUSxLQUFLLEdBQUc7QUFBQSxjQUNoQjtBQUFBLFlBQ0Q7QUFBQSxVQUNEO0FBQUEsUUFD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QUU7QUFBQyxTQUFHLEVBQUVBLEVBQUM7QUFBRSxRQUFJRixLQUFFRSxHQUFFO0FBQUksSUFBQUYsTUFBR0EsR0FBRSxRQUFNQSxHQUFFLElBQUksSUFBSSxXQUFTLE1BQUksRUFBRSxLQUFLQSxFQUFDLEtBQUcsTUFBSUMsT0FBQyxRQUFDLDJCQUF5QixJQUFFQSxlQUFFLDBCQUF3QixHQUFHLENBQUMsSUFBR0QsR0FBRSxJQUFJLEdBQUcsUUFBUSxTQUFTLEdBQUU7QUFBQyxRQUFFLE1BQUksRUFBRSxNQUFJLEVBQUUsSUFBRyxFQUFFLFFBQU0sTUFBSSxFQUFFLEtBQUcsRUFBRSxNQUFLLEVBQUUsSUFBRSxRQUFPLEVBQUUsTUFBSTtBQUFBLElBQUMsQ0FBQyxJQUFHLElBQUUsSUFBRTtBQUFBLEVBQUksR0FBRUMsT0FBQyxRQUFDLE1BQUksU0FBU0MsSUFBRUcsSUFBRTtBQUFDLElBQUFBLEdBQUUsS0FBSyxTQUFTSCxJQUFFO0FBQUMsVUFBRztBQUFDLFFBQUFBLEdBQUUsSUFBSSxRQUFRLENBQUMsR0FBRUEsR0FBRSxNQUFJQSxHQUFFLElBQUksT0FBTyxTQUFTLEdBQUU7QUFBQyxpQkFBTSxDQUFDLEVBQUUsTUFBSVUsSUFBRSxDQUFDO0FBQUEsUUFBQyxDQUFDO0FBQUEsTUFBQyxTQUFPVCxJQUFOO0FBQVMsUUFBQUUsR0FBRSxLQUFLLFNBQVMsR0FBRTtBQUFDLFlBQUUsUUFBTSxFQUFFLE1BQUksQ0FBQTtBQUFBLFFBQUcsQ0FBQyxHQUFFQSxLQUFFLElBQUdKLE9BQUFBLFFBQUUsSUFBSUUsSUFBRUQsR0FBRSxHQUFHO0FBQUEsTUFBQztBQUFBLElBQUMsQ0FBQyxHQUFFLEtBQUcsRUFBRUEsSUFBRUcsRUFBQztBQUFBLEVBQUMsR0FBRUosT0FBQUEsUUFBRSxVQUFRLFNBQVNDLElBQUU7QUFBQyxTQUFHLEVBQUVBLEVBQUM7QUFBRSxRQUFJRyxJQUFFRixLQUFFRCxHQUFFO0FBQUksSUFBQUMsTUFBR0EsR0FBRSxRQUFNQSxHQUFFLElBQUksR0FBRyxRQUFRLFNBQVMsR0FBRTtBQUFD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RUFBRSxPQUFLLEVBQUUsSUFBSSxRQUFNLEVBQUUsSUFBSSxJQUFJLEdBQUcsUUFBUSxTQUFTUCxJQUFFO0FBQUMsb0JBQVksT0FBT0EsR0FBRSxPQUFLQSxHQUFFLElBQUs7QUFBQSxJQUFBLENBQUMsR0FBRSxFQUFFLElBQUksTUFBSSxPQUFNLFNBQU8sSUFBRSxFQUFFLENBQUEsR0FBRyxDQUFDLEdBQUcsUUFBTSxFQUFFLElBQUksUUFBTU8sT0FBSSxFQUFFLElBQUksTUFBSU4sS0FBRyxFQUFFLE1BQUksT0FBTSxFQUFFLE1BQUksRUFBRSxPQUFLLEVBQUUsSUFBSSxJQUFJLFNBQVNELElBQUU7QUFBQyxhQUFPLEVBQUVBLElBQUVDLElBQUVNLEVBQUM7QUFBQSxJQUFDLENBQUMsSUFBRztBQUFBLEVBQUM7QUFBQyxXQUFTLEVBQUUsR0FBRU4sSUFBRU0sSUFBRTtBQUFDLFdBQU8sTUFBSSxFQUFFLE1BQUksTUFBSyxFQUFFLE1BQUksRUFBRSxPQUFLLEVBQUUsSUFBSSxJQUFJLFNBQVNQLElBQUU7QUFBQyxhQUFPLEVBQUVBLElBQUVDLElBQUVNLEVBQUM7QUFBQSxJQUFDLENBQUMsR0FBRSxFQUFFLE9BQUssRUFBRSxJQUFJLFFBQU1OLE9BQUksRUFBRSxPQUFLTSxHQUFFLGFBQWEsRUFBRSxLQUFJLEVBQUUsR0FBRyxHQUFFLEVBQUUsSUFBSSxNQUFJLE1BQUcsRUFBRSxJQUFJLE1BQUlBLE1BQUk7QUFBQSxFQUFDO0FBQUMsV0FBUyxJQUFHO0FBQUMsU0FBSyxNQUFJLEdBQUUsS0FBSyxJQUFFLE1BQUssS0FBSyxNQUFJO0FBQUEsRUFBSTtBQUFDLFdBQVMsRUFBRSxHQUFFO0FBQUMsUUFBSU4sS0FBRSxFQUFFLEdBQUc7QUFBSSxXQUFPQSxNQUFHQSxHQUFFLE9BQUtBLEdBQUUsSUFBSSxDQUFDO0FBQUEsRUFBQztBQUFxTCxXQUFTLElBQUc7QUFBQyxTQUFLLElBQUUsTUFBSyxLQUFLLElBQUU7QUFBQSxFQUFJO0FBQUNNLFNBQUMsUUFBQyxVQUFRLFNBQVMsR0FBRTtBQUFDLFFBQUlOLEtBQUUsRUFBRTtBQUFJLElBQUFBLE1BQUdBLEdBQUUsT0FBS0EsR0FBRSxJQUFHLEdBQUdBLE1BQUcsU0FBSyxFQUFFLFFBQU0sRUFBRSxPQUFLLE9BQU0sS0FBRyxFQUFFLENBQUM7QUFBQSxFQUFDLElBQUcsRUFBRSxZQUFVLElBQUlELE9BQUFBLGFBQUcsTUFBSSxTQUFTLEdBQUVDLElBQUU7QUFBQyxRQUFJTSxLQUFFTixHQUFFLEtBQUlHLEtBQUU7QUFBSyxZQUFNQSxHQUFFLE1BQUlBLEdBQUUsSUFBRSxDQUFFLElBQUVBLEdBQUUsRUFBRSxLQUFLRyxFQUFDO0FBQUUsUUFBSUwsS0FBRSxFQUFFRSxHQUFFLEdBQUcsR0FBRUwsS0FBRSxPQUFHSCxLQUFFLFdBQVU7QUFBQyxNQUFBRyxPQUFJQSxLQUFFLE1BQUdRLEdBQUUsTUFBSSxNQUFLTCxLQUFFQSxHQUFFVyxFQUFDLElBQUVBLEdBQUM7QUFBQSxJQUFHO0FBQUUsSUFBQU4sR0FBRSxNQUFJWDtBQUFFLFFBQUlpQixLQUFFLFdBQVU7QUFBQyxVQUFHLENBQUMsRUFBRVQsR0FBRSxLQUFJO0FBQUMsWUFBR0EsR0FBRSxNQUFNLEtBQUk7QUFBQyxjQUFJSixLQUFFSSxHQUFFLE1BQU07QUFBSSxVQUFBQSxHQUFFLElBQUksSUFBSSxDQUFDLElBQUUsRUFBRUosSUFBRUEsR0FBRSxJQUFJLEtBQUlBLEdBQUUsSUFBSSxHQUFHO0FBQUEsUUFBQztBQUFDLFlBQUlDO0FBQUUsYUFBSUcsR0FBRSxTQUFTLEVBQUMsS0FBSUEsR0FBRSxNQUFJLEtBQUksQ0FBQyxHQUFFSCxLQUFFRyxHQUFFLEVBQUUsSUFBRztBQUFJLFVBQUFILEdBQUU7TUFBYTtBQUFBLElBQUMsR0FBRUssS0FBRSxTQUFLTCxHQUFFO0FBQUksSUFBQUcsR0FBRSxTQUFPRSxNQUFHRixHQUFFLFNBQVMsRUFBQyxLQUFJQSxHQUFFLE1BQUlBLEdBQUUsSUFBSSxJQUFJLENBQUMsRUFBQyxDQUFDLEdBQUUsRUFBRSxLQUFLUixJQUFFQSxFQUFDO0FBQUEsRUFBQyxHQUFFLEVBQUUsVUFBVSx1QkFBcUIsV0FBVTtBQUFDLFNBQUssSUFBRSxDQUFFO0FBQUEsRUFBQSxHQUFFLEVBQUUsVUFBVSxTQUFPLFNBQVMsR0FBRVcsSUFBRTtBQUFDLFFBQUcsS0FBSyxLQUFJO0FBQUMsVUFBRyxLQUFLLElBQUksS0FBSTtBQUFDLFlBQUlILEtBQUUsU0FBUyxjQUFjLEtBQUssR0FBRUwsS0FBRSxLQUFLLElBQUksSUFBSSxDQUFDLEVBQUU7QUFBSSxhQUFLLElBQUksSUFBSSxDQUFDLElBQUUsRUFBRSxLQUFLLEtBQUlLLElBQUVMLEdBQUUsTUFBSUEsR0FBRSxHQUFHO0FBQUEsTUFBQztBQUFDLFdBQUssTUFBSTtBQUFBLElBQUk7QUFBQyxRQUFJSCxLQUFFVyxHQUFFLE9BQUtOLE9BQUFBLGNBQUVDLE9BQUFBLFVBQUUsTUFBSyxFQUFFLFFBQVE7QUFBRSxXQUFPTixPQUFJQSxHQUFFLE1BQUksT0FBTSxDQUFDSyxPQUFDLGNBQUNDLE9BQUMsVUFBQyxNQUFLSyxHQUFFLE1BQUksT0FBSyxFQUFFLFFBQVEsR0FBRVgsRUFBQztBQUFBLEVBQUM7QUFBRSxNQUFJLElBQUUsU0FBUyxHQUFFSyxJQUFFTSxJQUFFO0FBQUMsUUFBRyxFQUFFQSxHQUFFLENBQUMsTUFBSUEsR0FBRSxDQUFDLEtBQUcsRUFBRSxFQUFFLE9BQU9OLEVBQUMsR0FBRSxFQUFFLE1BQU0sZ0JBQWMsUUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDLEtBQUcsQ0FBQyxFQUFFLEVBQUU7QUFBTSxXQUFJTSxLQUFFLEVBQUUsR0FBRUEsTUFBRztBQUFDLGVBQUtBLEdBQUUsU0FBTztBQUFHLFVBQUFBLEdBQUUsSUFBRyxFQUFJO0FBQUMsWUFBR0EsR0FBRSxDQUFDLElBQUVBLEdBQUUsQ0FBQztBQUFFO0FBQU0sVUFBRSxJQUFFQSxLQUFFQSxHQUFFLENBQUM7QUFBQSxNQUFDO0FBQUEsRUFBQztBQUFrcEIsR0FBQyxFQUFFLFlBQVUsSUFBSVAsT0FBQUEsYUFBRyxNQUFJLFNBQVMsR0FBRTtBQUFDLFFBQUlDLEtBQUUsTUFBS00sS0FBRSxFQUFFTixHQUFFLEdBQUcsR0FBRUcsS0FBRUgsR0FBRSxFQUFFLElBQUksQ0FBQztBQUFFLFdBQU9HLEdBQUUsQ0FBQyxLQUFJLFNBQVNGLElBQUU7QUFBQyxVQUFJSCxLQUFFLFdBQVU7QUFBQyxRQUFBRSxHQUFFLE1BQU0sZUFBYUcsR0FBRSxLQUFLRixFQUFDLEdBQUUsRUFBRUQsSUFBRSxHQUFFRyxFQUFDLEtBQUdGLEdBQUM7QUFBQSxNQUFFO0FBQUUsTUFBQUssS0FBRUEsR0FBRVIsRUFBQyxJQUFFQTtJQUFHO0FBQUEsRUFBQyxHQUFFLEVBQUUsVUFBVSxTQUFPLFNBQVMsR0FBRTtBQUFDLFNBQUssSUFBRSxNQUFLLEtBQUssSUFBRSxvQkFBSTtBQUFJLFFBQUlFLEtBQUVHLE9BQUMsYUFBQyxFQUFFLFFBQVE7QUFBRSxNQUFFLGVBQWEsUUFBTSxFQUFFLFlBQVksQ0FBQyxLQUFHSCxHQUFFLFFBQU87QUFBRyxhQUFRTSxLQUFFTixHQUFFLFFBQU9NO0FBQUssV0FBSyxFQUFFLElBQUlOLEdBQUVNLEVBQUMsR0FBRSxLQUFLLElBQUUsQ0FBQyxHQUFFLEdBQUUsS0FBSyxDQUFDLENBQUM7QUFBRSxXQUFPLEVBQUU7QUFBQSxFQUFRLEdBQUUsRUFBRSxVQUFVLHFCQUFtQixFQUFFLFVBQVUsb0JBQWtCLFdBQVU7QUFBQyxRQUFJLElBQUU7QUFBSyxTQUFLLEVBQUUsUUFBUSxTQUFTTixJQUFFTSxJQUFFO0FBQUMsUUFBRSxHQUFFQSxJQUFFTixFQUFDO0FBQUEsSUFBQyxDQUFDO0FBQUEsRUFBQztBQUFFLE1BQUksSUFBRSxlQUFhLE9BQU8sVUFBUSxPQUFPLE9BQUssT0FBTyxJQUFJLGVBQWUsS0FBRyxPQUFNLElBQUUsMlJBQTBSLElBQUUsb0NBQW1DLElBQUUsYUFBWSxJQUFFLGVBQWEsT0FBTyxVQUFTLElBQUUsU0FBUyxHQUFFO0FBQUMsWUFBTyxlQUFhLE9BQU8sVUFBUSxZQUFVLE9BQU8sT0FBTSxJQUFHLGdCQUFjLGNBQWMsS0FBSyxDQUFDO0FBQUEsRUFBQztBQUFnTEQsU0FBQyxVQUFDLFVBQVUsbUJBQWlCLENBQUUsR0FBQyxDQUFDLHNCQUFxQiw2QkFBNEIscUJBQXFCLEVBQUUsUUFBUSxTQUFTQyxJQUFFO0FBQUMsV0FBTyxlQUFlRCxPQUFBQSxVQUFFLFdBQVVDLElBQUUsRUFBQyxjQUFhLE1BQUcsS0FBSSxXQUFVO0FBQUMsYUFBTyxLQUFLLFlBQVVBLEVBQUM7QUFBQSxJQUFDLEdBQUUsS0FBSSxTQUFTLEdBQUU7QUFBQyxhQUFPLGVBQWUsTUFBS0EsSUFBRSxFQUFDLGNBQWEsTUFBRyxVQUFTLE1BQUcsT0FBTSxFQUFDLENBQUM7QUFBQSxJQUFDLEVBQUMsQ0FBQztBQUFBLEVBQUMsQ0FBQztBQUFFLE1BQUksSUFBRU0sT0FBQUEsUUFBRTtBQUFNLFdBQVMsSUFBRztBQUFBO0FBQUUsV0FBUyxJQUFHO0FBQUMsV0FBTyxLQUFLO0FBQUEsRUFBWTtBQUFDLFdBQVMsS0FBSTtBQUFDLFdBQU8sS0FBSztBQUFBLEVBQWdCO0FBQUNBLFNBQUFBLFFBQUUsUUFBTSxTQUFTLEdBQUU7QUFBQyxXQUFPLE1BQUksSUFBRSxFQUFFLENBQUMsSUFBRyxFQUFFLFVBQVEsR0FBRSxFQUFFLHVCQUFxQixHQUFFLEVBQUUscUJBQW1CLElBQUcsRUFBRSxjQUFZO0FBQUEsRUFBQztBQUFLLE1BQUksS0FBRyxFQUFDLFlBQVcsT0FBRyxjQUFhLE1BQUcsS0FBSSxXQUFVO0FBQUMsV0FBTyxLQUFLO0FBQUEsRUFBSyxFQUFDLEdBQUUsS0FBR0EsT0FBQyxRQUFDO0FBQU1BLFNBQUFBLFFBQUUsUUFBTSxTQUFTLEdBQUU7QUFBQyxnQkFBVSxPQUFPLEVBQUUsUUFBTSxTQUFTUCxJQUFFO0FBQUMsVUFBSUMsS0FBRUQsR0FBRSxPQUFNTyxLQUFFUCxHQUFFLE1BQUtFLEtBQUUsQ0FBRTtBQUFDLGVBQVFILE1BQUtFLElBQUU7QUFBQyxZQUFJTCxLQUFFSyxHQUFFRixFQUFDO0FBQUUsWUFBRyxFQUFFLFlBQVVBLE1BQUcsa0JBQWlCRSxNQUFHLFFBQU1MLE1BQUcsS0FBRyxlQUFhRyxNQUFHLGVBQWFRLE1BQUcsWUFBVVIsTUFBRyxnQkFBY0EsS0FBRztBQUFDLGNBQUljLEtBQUVkLEdBQUUsWUFBYTtBQUFDLDZCQUFpQkEsTUFBRyxXQUFVRSxNQUFHLFFBQU1BLEdBQUUsUUFBTUYsS0FBRSxVQUFRLGVBQWFBLE1BQUcsU0FBS0gsS0FBRUEsS0FBRSxLQUFHLG9CQUFrQmlCLEtBQUVkLEtBQUUsZUFBYSxlQUFhYyxNQUFHLFlBQVVOLE1BQUcsZUFBYUEsTUFBRyxFQUFFTixHQUFFLElBQUksSUFBRSxjQUFZWSxLQUFFZCxLQUFFLGNBQVksYUFBV2MsS0FBRWQsS0FBRSxlQUFhLEVBQUUsS0FBS0EsRUFBQyxJQUFFQSxLQUFFYyxLQUFFLE9BQUtOLEdBQUUsUUFBUSxHQUFHLEtBQUcsRUFBRSxLQUFLUixFQUFDLElBQUVBLEtBQUVBLEdBQUUsUUFBUSxHQUFFLEtBQUssRUFBRSxZQUFXLElBQUcsU0FBT0gsT0FBSUEsS0FBRSxVQUFRaUIsS0FBRWQsS0FBRSxXQUFVLGNBQVljLE1BQUdYLEdBQUVILEtBQUVjLEVBQUMsTUFBSWQsS0FBRSxtQkFBa0JHLEdBQUVILEVBQUMsSUFBRUg7QUFBQSxRQUFDO0FBQUEsTUFBQztBQUFDLGtCQUFVVyxNQUFHTCxHQUFFLFlBQVUsTUFBTSxRQUFRQSxHQUFFLEtBQUssTUFBSUEsR0FBRSxRQUFNRSxPQUFDLGFBQUNILEdBQUUsUUFBUSxFQUFFLFFBQVEsU0FBU0QsSUFBRTtBQUFDLFFBQUFBLEdBQUUsTUFBTSxXQUFTLE1BQUlFLEdBQUUsTUFBTSxRQUFRRixHQUFFLE1BQU0sS0FBSztBQUFBLE1BQUMsQ0FBQyxJQUFHLFlBQVVPLE1BQUcsUUFBTUwsR0FBRSxpQkFBZUEsR0FBRSxRQUFNRSxPQUFDLGFBQUNILEdBQUUsUUFBUSxFQUFFLFFBQVEsU0FBU0QsSUFBRTtBQUFDLFFBQUFBLEdBQUUsTUFBTSxXQUFTRSxHQUFFLFdBQVMsTUFBSUEsR0FBRSxhQUFhLFFBQVFGLEdBQUUsTUFBTSxLQUFLLElBQUVFLEdBQUUsZ0JBQWNGLEdBQUUsTUFBTTtBQUFBLE1BQUssQ0FBQyxJQUFHQyxHQUFFLFNBQU8sQ0FBQ0EsR0FBRSxhQUFXQyxHQUFFLFFBQU1ELEdBQUUsT0FBTSxPQUFPLGVBQWVDLElBQUUsYUFBWSxFQUFFLE1BQUlELEdBQUUsYUFBVyxDQUFDQSxHQUFFLFNBQU9BLEdBQUUsU0FBT0EsR0FBRSxlQUFhQyxHQUFFLFFBQU1BLEdBQUUsWUFBVUQsR0FBRSxZQUFXRCxHQUFFLFFBQU1FO0FBQUEsSUFBQyxFQUFFLENBQUMsR0FBRSxFQUFFLFdBQVMsR0FBRSxNQUFJLEdBQUcsQ0FBQztBQUFBLEVBQUM7QUFBRSxNQUFJLEtBQUdLLE9BQUMsUUFBQztBQUFJQSxTQUFDLFFBQUMsTUFBSSxTQUFTLEdBQUU7QUFBQyxVQUFJLEdBQUcsQ0FBQyxHQUFLLEVBQUU7QUFBQSxFQUFHO0FBQUUsTUFBSSxLQUFHQSxlQUFFO0FBQU9BLFNBQUFBLFFBQUUsU0FBTyxTQUFTLEdBQUU7QUFBQyxVQUFJLEdBQUcsQ0FBQztBQUFFLFFBQUlOLEtBQUUsRUFBRSxPQUFNTSxLQUFFLEVBQUU7QUFBSSxZQUFNQSxNQUFHLGVBQWEsRUFBRSxRQUFNLFdBQVVOLE1BQUdBLEdBQUUsVUFBUU0sR0FBRSxVQUFRQSxHQUFFLFFBQU0sUUFBTU4sR0FBRSxRQUFNLEtBQUdBLEdBQUU7QUFBQSxFQUFjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0V2OE9hLFFBQUFBLGNBQWNBLENBQUNDLFFBQVEsUUFBUztBQUMzQyxVQUFNLENBQUNDLFFBQVFDLFNBQVMsSUFBSUMsRUFBUyxLQUFLO0FBQ3BDQyxVQUFBQSxXQUFXQyxJQUFPLElBQUk7QUFFNUIsVUFBTUMsV0FBV0EsTUFBTTtBQUNyQkMsbUJBQWFILFNBQVNJLE9BQU87QUFDbkJDLGdCQUFBQSxDQUFBQSxTQUFRLENBQUNBLElBQUk7QUFBQSxJQUFBO0FBR3pCQyxNQUFVLE1BQU07QUFDTEYsZUFBQUEsVUFBVUcsV0FBVyxNQUFNO0FBQ2xDVCxrQkFBVSxJQUFJO0FBQUEsU0FDYkYsS0FBSztBQUVELGFBQUEsTUFBTU8sYUFBYUgsU0FBU0ksT0FBTztBQUFBLElBQUEsR0FDekMsQ0FBQ1IsS0FBSyxDQUFDO0FBRUgsV0FBQTtBQUFBLE1BQ0xDO0FBQUFBLE1BQ0FLO0FBQUFBLElBQUFBO0FBQUFBLEVBRUo7QUN2QjhELE1BQUksSUFBRTtBQUFFLFdBQVMsRUFBRXRCLElBQUVRLElBQUUsR0FBRU4sSUFBRUksSUFBRVEsSUFBRTtBQUFDLFFBQUljLElBQUV6QixJQUFFMEIsS0FBRSxDQUFBO0FBQUcsU0FBSTFCLE1BQUtLO0FBQUUsZUFBT0wsS0FBRXlCLEtBQUVwQixHQUFFTCxFQUFDLElBQUUwQixHQUFFMUIsRUFBQyxJQUFFSyxHQUFFTCxFQUFDO0FBQUUsUUFBSU4sS0FBRSxFQUFDLE1BQUtHLElBQUUsT0FBTTZCLElBQUUsS0FBSSxHQUFFLEtBQUlELElBQUUsS0FBSSxNQUFLLElBQUcsTUFBSyxLQUFJLEdBQUUsS0FBSSxNQUFLLEtBQUksUUFBTyxLQUFJLE1BQUssS0FBSSxNQUFLLGFBQVksUUFBTyxLQUFJLEVBQUUsR0FBRSxVQUFTdEIsSUFBRSxRQUFPUSxHQUFDO0FBQUUsUUFBRyxjQUFZLE9BQU9kLE9BQUk0QixLQUFFNUIsR0FBRTtBQUFjLFdBQUlHLE1BQUt5QjtBQUFFLG1CQUFTQyxHQUFFMUIsRUFBQyxNQUFJMEIsR0FBRTFCLEVBQUMsSUFBRXlCLEdBQUV6QixFQUFDO0FBQUcsV0FBT0UsT0FBQyxRQUFDLFNBQU9BLGVBQUUsTUFBTVIsRUFBQyxHQUFFQTtBQUFBLEVBQUM7QUNFdFksUUFBTWlDLFFBQVFDLE9BQWUsY0FBQTtBQUVwQyxRQUFNQyxlQUFlQSxDQUFDO0FBQUEsSUFBRUM7QUFBQUEsSUFBVUM7QUFBQUEsRUFBTSxNQUFNO0FBQ3JDQyxXQUFBQSxFQUFDTCxNQUFNTSxVQUFRO0FBQUEsTUFBQ0Y7QUFBQUEsTUFBYUQ7QUFBQUEsSUFBQUEsQ0FBNEI7QUFBQSxFQUNsRTtBQ0hhSSxRQUFBQSxTQUFTQSxDQUFDQyxVQUEwQixDQUFDQyxRQUF1QkMsVUFDdkVDLE9BQUFBLE9BQWFOLEVBQUNILGNBQVk7QUFBQSxJQUFDRSxPQUFPTTtBQUFBQSxJQUFNUCxVQUFFSztBQUFBQSxFQUFLLENBQUEsR0FBa0JDLE1BQXNCO0FDRDVFRyxRQUFBQSxrQkFBa0IsTUFBd0JDLElBQW1CYixLQUFLO0FDSS9FLFdBQVNjLG1CQUFpQjtBQUN4QixTQUFLLFdBQVc7QUFDaEIsU0FBSyxPQUFPO0FBQUEsRUFDZDtBQUVBLE1BQUEsa0JBQWlCQTtBQ29CakIsV0FBU0MsS0FBRyxPQUFPLE9BQU87QUFDeEIsV0FBTyxVQUFVLFNBQVUsVUFBVSxTQUFTLFVBQVU7QUFBQSxFQUMxRDtBQUVBLE1BQUEsT0FBaUJBO0FDcENqQixNQUFJQSxPQUFLQztBQVVULFdBQVNDLGVBQWEsT0FBTyxLQUFLO0FBQ2hDLFFBQUksU0FBUyxNQUFNO0FBQ25CLFdBQU8sVUFBVTtBQUNmLFVBQUlGLEtBQUcsTUFBTSxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRztBQUM3QixlQUFPO0FBQUEsTUFDUjtBQUFBLElBQ0Y7QUFDRCxXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUEsZ0JBQWlCRTtBQ3BCakIsTUFBSUEsaUJBQWVEO0FBR25CLE1BQUksYUFBYSxNQUFNO0FBR3ZCLE1BQUksU0FBUyxXQUFXO0FBV3hCLFdBQVNFLGtCQUFnQixLQUFLO0FBQzVCLFFBQUksT0FBTyxLQUFLLFVBQ1pDLFNBQVFGLGVBQWEsTUFBTSxHQUFHO0FBRWxDLFFBQUlFLFNBQVEsR0FBRztBQUNiLGFBQU87QUFBQSxJQUNSO0FBQ0QsUUFBSSxZQUFZLEtBQUssU0FBUztBQUM5QixRQUFJQSxVQUFTLFdBQVc7QUFDdEIsV0FBSyxJQUFHO0FBQUEsSUFDWixPQUFTO0FBQ0wsYUFBTyxLQUFLLE1BQU1BLFFBQU8sQ0FBQztBQUFBLElBQzNCO0FBQ0QsTUFBRSxLQUFLO0FBQ1AsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFBLG1CQUFpQkQ7QUNsQ2pCLE1BQUlELGlCQUFlRDtBQVduQixXQUFTSSxlQUFhLEtBQUs7QUFDekIsUUFBSSxPQUFPLEtBQUssVUFDWkQsU0FBUUYsZUFBYSxNQUFNLEdBQUc7QUFFbEMsV0FBT0UsU0FBUSxJQUFJLFNBQVksS0FBS0EsTUFBSyxFQUFFLENBQUM7QUFBQSxFQUM5QztBQUVBLE1BQUEsZ0JBQWlCQztBQ2xCakIsTUFBSUgsaUJBQWVEO0FBV25CLFdBQVNLLGVBQWEsS0FBSztBQUN6QixXQUFPSixlQUFhLEtBQUssVUFBVSxHQUFHLElBQUk7QUFBQSxFQUM1QztBQUVBLE1BQUEsZ0JBQWlCSTtBQ2ZqQixNQUFJLGVBQWVMO0FBWW5CLFdBQVNNLGVBQWEsS0FBSyxPQUFPO0FBQ2hDLFFBQUksT0FBTyxLQUFLLFVBQ1pILFNBQVEsYUFBYSxNQUFNLEdBQUc7QUFFbEMsUUFBSUEsU0FBUSxHQUFHO0FBQ2IsUUFBRSxLQUFLO0FBQ1AsV0FBSyxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUM7QUFBQSxJQUMxQixPQUFTO0FBQ0wsV0FBS0EsTUFBSyxFQUFFLENBQUMsSUFBSTtBQUFBLElBQ2xCO0FBQ0QsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFBLGdCQUFpQkc7QUN6QmpCLE1BQUksaUJBQWlCTixpQkFDakIsa0JBQWtCTyxrQkFDbEIsZUFBZUMsZUFDZixlQUFlQyxlQUNmLGVBQWVDO0FBU25CLFdBQVNDLFlBQVUsU0FBUztBQUMxQixRQUFJUixTQUFRLElBQ1IsU0FBUyxXQUFXLE9BQU8sSUFBSSxRQUFRO0FBRTNDLFNBQUssTUFBSztBQUNWLFdBQU8sRUFBRUEsU0FBUSxRQUFRO0FBQ3ZCLFVBQUksUUFBUSxRQUFRQSxNQUFLO0FBQ3pCLFdBQUssSUFBSSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUFBLElBQzVCO0FBQUEsRUFDSDtBQUdBUSxjQUFVLFVBQVUsUUFBUTtBQUM1QkEsY0FBVSxVQUFVLFFBQVEsSUFBSTtBQUNoQ0EsY0FBVSxVQUFVLE1BQU07QUFDMUJBLGNBQVUsVUFBVSxNQUFNO0FBQzFCQSxjQUFVLFVBQVUsTUFBTTtBQUUxQixNQUFBLGFBQWlCQTtBQy9CakIsTUFBSUEsY0FBWVg7QUFTaEIsV0FBU1ksZUFBYTtBQUNwQixTQUFLLFdBQVcsSUFBSUQ7QUFDcEIsU0FBSyxPQUFPO0FBQUEsRUFDZDtBQUVBLE1BQUEsY0FBaUJDO0FDTGpCLFdBQVNDLGNBQVksS0FBSztBQUN4QixRQUFJLE9BQU8sS0FBSyxVQUNaLFNBQVMsS0FBSyxRQUFRLEVBQUUsR0FBRztBQUUvQixTQUFLLE9BQU8sS0FBSztBQUNqQixXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUEsZUFBaUJBO0FDUmpCLFdBQVNDLFdBQVMsS0FBSztBQUNyQixXQUFPLEtBQUssU0FBUyxJQUFJLEdBQUc7QUFBQSxFQUM5QjtBQUVBLE1BQUEsWUFBaUJBO0FDSmpCLFdBQVNDLFdBQVMsS0FBSztBQUNyQixXQUFPLEtBQUssU0FBUyxJQUFJLEdBQUc7QUFBQSxFQUM5QjtBQUVBLE1BQUEsWUFBaUJBO0FDWmpCLE1BQUlDLGVBQWEsT0FBT0Msa0JBQVUsWUFBWUEsa0JBQVVBLGVBQU8sV0FBVyxVQUFVQTtBQUVwRixNQUFBLGNBQWlCRDtBQ0hqQixNQUFJLGFBQWFoQjtBQUdqQixNQUFJLFdBQVcsT0FBTyxRQUFRLFlBQVksUUFBUSxLQUFLLFdBQVcsVUFBVTtBQUc1RSxNQUFJa0IsU0FBTyxjQUFjLFlBQVksU0FBUyxhQUFhLEVBQUM7QUFFNUQsTUFBQSxRQUFpQkE7QUNSakIsTUFBSUEsU0FBT2xCO0FBR1gsTUFBSW1CLFdBQVNELE9BQUs7QUFFbEIsTUFBQSxVQUFpQkM7QUNMakIsTUFBSUEsV0FBU25CO0FBR2IsTUFBSW9CLGdCQUFjLE9BQU87QUFHekIsTUFBSUMsbUJBQWlCRCxjQUFZO0FBT2pDLE1BQUlFLHlCQUF1QkYsY0FBWTtBQUd2QyxNQUFJRyxtQkFBaUJKLFdBQVNBLFNBQU8sY0FBYztBQVNuRCxXQUFTSyxZQUFVLE9BQU87QUFDeEIsUUFBSSxRQUFRSCxpQkFBZSxLQUFLLE9BQU9FLGdCQUFjLEdBQ2pELE1BQU0sTUFBTUEsZ0JBQWM7QUFFOUIsUUFBSTtBQUNGLFlBQU1BLGdCQUFjLElBQUk7QUFDeEIsVUFBSSxXQUFXO0FBQUEsSUFDbkIsU0FBVzdELElBQVA7QUFBQSxJQUFZO0FBRWQsUUFBSSxTQUFTNEQsdUJBQXFCLEtBQUssS0FBSztBQUM1QyxRQUFJLFVBQVU7QUFDWixVQUFJLE9BQU87QUFDVCxjQUFNQyxnQkFBYyxJQUFJO0FBQUEsTUFDOUIsT0FBVztBQUNMLGVBQU8sTUFBTUEsZ0JBQWM7QUFBQSxNQUM1QjtBQUFBLElBQ0Y7QUFDRCxXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUEsYUFBaUJDO0FDNUNqQixNQUFJSixnQkFBYyxPQUFPO0FBT3pCLE1BQUksdUJBQXVCQSxjQUFZO0FBU3ZDLFdBQVNLLGlCQUFlLE9BQU87QUFDN0IsV0FBTyxxQkFBcUIsS0FBSyxLQUFLO0FBQUEsRUFDeEM7QUFFQSxNQUFBLGtCQUFpQkE7QUNyQmpCLE1BQUlOLFdBQVNuQixTQUNULFlBQVlPLFlBQ1osaUJBQWlCQztBQUdyQixNQUFJLFVBQVUsaUJBQ1YsZUFBZTtBQUduQixNQUFJLGlCQUFpQlcsV0FBU0EsU0FBTyxjQUFjO0FBU25ELFdBQVNPLGFBQVcsT0FBTztBQUN6QixRQUFJLFNBQVMsTUFBTTtBQUNqQixhQUFPLFVBQVUsU0FBWSxlQUFlO0FBQUEsSUFDN0M7QUFDRCxXQUFRLGtCQUFrQixrQkFBa0IsT0FBTyxLQUFLLElBQ3BELFVBQVUsS0FBSyxJQUNmLGVBQWUsS0FBSztBQUFBLEVBQzFCO0FBRUEsTUFBQSxjQUFpQkE7QUNGakIsV0FBU0MsV0FBUyxPQUFPO0FBQ3ZCLFFBQUksT0FBTyxPQUFPO0FBQ2xCLFdBQU8sU0FBUyxTQUFTLFFBQVEsWUFBWSxRQUFRO0FBQUEsRUFDdkQ7QUFFQSxNQUFBLGFBQWlCQTtBQzlCakIsTUFBSUQsZUFBYTFCLGFBQ2IyQixhQUFXcEI7QUFHZixNQUFJLFdBQVcsMEJBQ1hxQixZQUFVLHFCQUNWLFNBQVMsOEJBQ1QsV0FBVztBQW1CZixXQUFTQyxhQUFXLE9BQU87QUFDekIsUUFBSSxDQUFDRixXQUFTLEtBQUssR0FBRztBQUNwQixhQUFPO0FBQUEsSUFDUjtBQUdELFFBQUksTUFBTUQsYUFBVyxLQUFLO0FBQzFCLFdBQU8sT0FBT0UsYUFBVyxPQUFPLFVBQVUsT0FBTyxZQUFZLE9BQU87QUFBQSxFQUN0RTtBQUVBLE1BQUEsZUFBaUJDO0FDcENqQixNQUFJWCxTQUFPbEI7QUFHWCxNQUFJOEIsZUFBYVosT0FBSyxvQkFBb0I7QUFFMUMsTUFBQSxjQUFpQlk7QUNMakIsTUFBSSxhQUFhOUI7QUFHakIsTUFBSSxhQUFjLFdBQVc7QUFDM0IsUUFBSSxNQUFNLFNBQVMsS0FBSyxjQUFjLFdBQVcsUUFBUSxXQUFXLEtBQUssWUFBWSxFQUFFO0FBQ3ZGLFdBQU8sTUFBTyxtQkFBbUIsTUFBTztBQUFBLEVBQzFDLEVBQUM7QUFTRCxXQUFTK0IsV0FBUyxNQUFNO0FBQ3RCLFdBQU8sQ0FBQyxDQUFDLGNBQWUsY0FBYztBQUFBLEVBQ3hDO0FBRUEsTUFBQSxZQUFpQkE7QUNsQmpCLE1BQUlDLGNBQVksU0FBUztBQUd6QixNQUFJQyxpQkFBZUQsWUFBVTtBQVM3QixXQUFTRSxXQUFTLE1BQU07QUFDdEIsUUFBSSxRQUFRLE1BQU07QUFDaEIsVUFBSTtBQUNGLGVBQU9ELGVBQWEsS0FBSyxJQUFJO0FBQUEsTUFDbkMsU0FBYXZFLElBQVA7QUFBQSxNQUFZO0FBQ2QsVUFBSTtBQUNGLGVBQVEsT0FBTztBQUFBLE1BQ3JCLFNBQWFBLElBQVA7QUFBQSxNQUFZO0FBQUEsSUFDZjtBQUNELFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBQSxZQUFpQndFO0FDekJqQixNQUFJTCxlQUFhN0IsY0FDYixXQUFXTyxXQUNYb0IsYUFBV25CLFlBQ1gsV0FBV0M7QUFNZixNQUFJLGVBQWU7QUFHbkIsTUFBSSxlQUFlO0FBR25CLE1BQUl1QixjQUFZLFNBQVMsV0FDckJaLGdCQUFjLE9BQU87QUFHekIsTUFBSWEsaUJBQWVELFlBQVU7QUFHN0IsTUFBSVgsbUJBQWlCRCxjQUFZO0FBR2pDLE1BQUksYUFBYTtBQUFBLElBQU8sTUFDdEJhLGVBQWEsS0FBS1osZ0JBQWMsRUFBRSxRQUFRLGNBQWMsTUFBTSxFQUM3RCxRQUFRLDBEQUEwRCxPQUFPLElBQUk7QUFBQSxFQUNoRjtBQVVBLFdBQVNjLGVBQWEsT0FBTztBQUMzQixRQUFJLENBQUNSLFdBQVMsS0FBSyxLQUFLLFNBQVMsS0FBSyxHQUFHO0FBQ3ZDLGFBQU87QUFBQSxJQUNSO0FBQ0QsUUFBSSxVQUFVRSxhQUFXLEtBQUssSUFBSSxhQUFhO0FBQy9DLFdBQU8sUUFBUSxLQUFLLFNBQVMsS0FBSyxDQUFDO0FBQUEsRUFDckM7QUFFQSxNQUFBLGdCQUFpQk07QUN0Q2pCLFdBQVNDLFdBQVMsUUFBUSxLQUFLO0FBQzdCLFdBQU8sVUFBVSxPQUFPLFNBQVksT0FBTyxHQUFHO0FBQUEsRUFDaEQ7QUFFQSxNQUFBLFlBQWlCQTtBQ1pqQixNQUFJLGVBQWVwQyxlQUNmLFdBQVdPO0FBVWYsV0FBUzhCLFlBQVUsUUFBUSxLQUFLO0FBQzlCLFFBQUksUUFBUSxTQUFTLFFBQVEsR0FBRztBQUNoQyxXQUFPLGFBQWEsS0FBSyxJQUFJLFFBQVE7QUFBQSxFQUN2QztBQUVBLE1BQUEsYUFBaUJBO0FDaEJqQixNQUFJQSxjQUFZckMsWUFDWmtCLFNBQU9YO0FBR1gsTUFBSStCLFFBQU1ELFlBQVVuQixRQUFNLEtBQUs7QUFFL0IsTUFBQSxPQUFpQm9CO0FDTmpCLE1BQUlELGNBQVlyQztBQUdoQixNQUFJdUMsaUJBQWVGLFlBQVUsUUFBUSxRQUFRO0FBRTdDLE1BQUEsZ0JBQWlCRTtBQ0xqQixNQUFJQSxpQkFBZXZDO0FBU25CLFdBQVN3QyxjQUFZO0FBQ25CLFNBQUssV0FBV0QsaUJBQWVBLGVBQWEsSUFBSSxJQUFJLENBQUE7QUFDcEQsU0FBSyxPQUFPO0FBQUEsRUFDZDtBQUVBLE1BQUEsYUFBaUJDO0FDSmpCLFdBQVNDLGFBQVcsS0FBSztBQUN2QixRQUFJLFNBQVMsS0FBSyxJQUFJLEdBQUcsS0FBSyxPQUFPLEtBQUssU0FBUyxHQUFHO0FBQ3RELFNBQUssUUFBUSxTQUFTLElBQUk7QUFDMUIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFBLGNBQWlCQTtBQ2hCakIsTUFBSUYsaUJBQWV2QztBQUduQixNQUFJMEMsbUJBQWlCO0FBR3JCLE1BQUl0QixnQkFBYyxPQUFPO0FBR3pCLE1BQUlDLG1CQUFpQkQsY0FBWTtBQVdqQyxXQUFTdUIsVUFBUSxLQUFLO0FBQ3BCLFFBQUksT0FBTyxLQUFLO0FBQ2hCLFFBQUlKLGdCQUFjO0FBQ2hCLFVBQUksU0FBUyxLQUFLLEdBQUc7QUFDckIsYUFBTyxXQUFXRyxtQkFBaUIsU0FBWTtBQUFBLElBQ2hEO0FBQ0QsV0FBT3JCLGlCQUFlLEtBQUssTUFBTSxHQUFHLElBQUksS0FBSyxHQUFHLElBQUk7QUFBQSxFQUN0RDtBQUVBLE1BQUEsV0FBaUJzQjtBQzdCakIsTUFBSUosaUJBQWV2QztBQUduQixNQUFJb0IsZ0JBQWMsT0FBTztBQUd6QixNQUFJQyxtQkFBaUJELGNBQVk7QUFXakMsV0FBU3dCLFVBQVEsS0FBSztBQUNwQixRQUFJLE9BQU8sS0FBSztBQUNoQixXQUFPTCxpQkFBZ0IsS0FBSyxHQUFHLE1BQU0sU0FBYWxCLGlCQUFlLEtBQUssTUFBTSxHQUFHO0FBQUEsRUFDakY7QUFFQSxNQUFBLFdBQWlCdUI7QUN0QmpCLE1BQUksZUFBZTVDO0FBR25CLE1BQUksaUJBQWlCO0FBWXJCLFdBQVM2QyxVQUFRLEtBQUssT0FBTztBQUMzQixRQUFJLE9BQU8sS0FBSztBQUNoQixTQUFLLFFBQVEsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJO0FBQ2pDLFNBQUssR0FBRyxJQUFLLGdCQUFnQixVQUFVLFNBQWEsaUJBQWlCO0FBQ3JFLFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBQSxXQUFpQkE7QUN0QmpCLE1BQUksWUFBWTdDLFlBQ1osYUFBYU8sYUFDYixVQUFVQyxVQUNWLFVBQVVDLFVBQ1YsVUFBVUM7QUFTZCxXQUFTb0MsT0FBSyxTQUFTO0FBQ3JCLFFBQUkzQyxTQUFRLElBQ1IsU0FBUyxXQUFXLE9BQU8sSUFBSSxRQUFRO0FBRTNDLFNBQUssTUFBSztBQUNWLFdBQU8sRUFBRUEsU0FBUSxRQUFRO0FBQ3ZCLFVBQUksUUFBUSxRQUFRQSxNQUFLO0FBQ3pCLFdBQUssSUFBSSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUFBLElBQzVCO0FBQUEsRUFDSDtBQUdBMkMsU0FBSyxVQUFVLFFBQVE7QUFDdkJBLFNBQUssVUFBVSxRQUFRLElBQUk7QUFDM0JBLFNBQUssVUFBVSxNQUFNO0FBQ3JCQSxTQUFLLFVBQVUsTUFBTTtBQUNyQkEsU0FBSyxVQUFVLE1BQU07QUFFckIsTUFBQSxRQUFpQkE7QUMvQmpCLE1BQUksT0FBTzlDLE9BQ1BXLGNBQVlKLFlBQ1orQixRQUFNOUI7QUFTVixXQUFTdUMsa0JBQWdCO0FBQ3ZCLFNBQUssT0FBTztBQUNaLFNBQUssV0FBVztBQUFBLE1BQ2QsUUFBUSxJQUFJO0FBQUEsTUFDWixPQUFPLEtBQUtULFNBQU8zQjtBQUFBQSxNQUNuQixVQUFVLElBQUk7QUFBQSxJQUNsQjtBQUFBLEVBQ0E7QUFFQSxNQUFBLGlCQUFpQm9DO0FDYmpCLFdBQVNDLFlBQVUsT0FBTztBQUN4QixRQUFJLE9BQU8sT0FBTztBQUNsQixXQUFRLFFBQVEsWUFBWSxRQUFRLFlBQVksUUFBUSxZQUFZLFFBQVEsWUFDdkUsVUFBVSxjQUNWLFVBQVU7QUFBQSxFQUNqQjtBQUVBLE1BQUEsYUFBaUJBO0FDZGpCLE1BQUksWUFBWWhEO0FBVWhCLFdBQVNpRCxhQUFXLEtBQUssS0FBSztBQUM1QixRQUFJLE9BQU8sSUFBSTtBQUNmLFdBQU8sVUFBVSxHQUFHLElBQ2hCLEtBQUssT0FBTyxPQUFPLFdBQVcsV0FBVyxNQUFNLElBQy9DLEtBQUs7QUFBQSxFQUNYO0FBRUEsTUFBQSxjQUFpQkE7QUNqQmpCLE1BQUlBLGVBQWFqRDtBQVdqQixXQUFTa0QsaUJBQWUsS0FBSztBQUMzQixRQUFJLFNBQVNELGFBQVcsTUFBTSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUc7QUFDaEQsU0FBSyxRQUFRLFNBQVMsSUFBSTtBQUMxQixXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUEsa0JBQWlCQztBQ2pCakIsTUFBSUQsZUFBYWpEO0FBV2pCLFdBQVNtRCxjQUFZLEtBQUs7QUFDeEIsV0FBT0YsYUFBVyxNQUFNLEdBQUcsRUFBRSxJQUFJLEdBQUc7QUFBQSxFQUN0QztBQUVBLE1BQUEsZUFBaUJFO0FDZmpCLE1BQUlGLGVBQWFqRDtBQVdqQixXQUFTb0QsY0FBWSxLQUFLO0FBQ3hCLFdBQU9ILGFBQVcsTUFBTSxHQUFHLEVBQUUsSUFBSSxHQUFHO0FBQUEsRUFDdEM7QUFFQSxNQUFBLGVBQWlCRztBQ2ZqQixNQUFJLGFBQWFwRDtBQVlqQixXQUFTcUQsY0FBWSxLQUFLLE9BQU87QUFDL0IsUUFBSSxPQUFPLFdBQVcsTUFBTSxHQUFHLEdBQzNCLE9BQU8sS0FBSztBQUVoQixTQUFLLElBQUksS0FBSyxLQUFLO0FBQ25CLFNBQUssUUFBUSxLQUFLLFFBQVEsT0FBTyxJQUFJO0FBQ3JDLFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBQSxlQUFpQkE7QUNyQmpCLE1BQUksZ0JBQWdCckQsZ0JBQ2hCLGlCQUFpQk8saUJBQ2pCLGNBQWNDLGNBQ2QsY0FBY0MsY0FDZCxjQUFjQztBQVNsQixXQUFTNEMsV0FBUyxTQUFTO0FBQ3pCLFFBQUluRCxTQUFRLElBQ1IsU0FBUyxXQUFXLE9BQU8sSUFBSSxRQUFRO0FBRTNDLFNBQUssTUFBSztBQUNWLFdBQU8sRUFBRUEsU0FBUSxRQUFRO0FBQ3ZCLFVBQUksUUFBUSxRQUFRQSxNQUFLO0FBQ3pCLFdBQUssSUFBSSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUFBLElBQzVCO0FBQUEsRUFDSDtBQUdBbUQsYUFBUyxVQUFVLFFBQVE7QUFDM0JBLGFBQVMsVUFBVSxRQUFRLElBQUk7QUFDL0JBLGFBQVMsVUFBVSxNQUFNO0FBQ3pCQSxhQUFTLFVBQVUsTUFBTTtBQUN6QkEsYUFBUyxVQUFVLE1BQU07QUFFekIsTUFBQSxZQUFpQkE7QUMvQmpCLE1BQUkzQyxjQUFZWCxZQUNac0MsUUFBTS9CLE1BQ04sV0FBV0M7QUFHZixNQUFJLG1CQUFtQjtBQVl2QixXQUFTK0MsV0FBUyxLQUFLLE9BQU87QUFDNUIsUUFBSSxPQUFPLEtBQUs7QUFDaEIsUUFBSSxnQkFBZ0I1QyxhQUFXO0FBQzdCLFVBQUksUUFBUSxLQUFLO0FBQ2pCLFVBQUksQ0FBQzJCLFNBQVEsTUFBTSxTQUFTLG1CQUFtQixHQUFJO0FBQ2pELGNBQU0sS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDO0FBQ3ZCLGFBQUssT0FBTyxFQUFFLEtBQUs7QUFDbkIsZUFBTztBQUFBLE1BQ1I7QUFDRCxhQUFPLEtBQUssV0FBVyxJQUFJLFNBQVMsS0FBSztBQUFBLElBQzFDO0FBQ0QsU0FBSyxJQUFJLEtBQUssS0FBSztBQUNuQixTQUFLLE9BQU8sS0FBSztBQUNqQixXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUEsWUFBaUJpQjtBQ2pDakIsTUFBSSxZQUFZdkQsWUFDWixhQUFhTyxhQUNiLGNBQWNDLGNBQ2QsV0FBV0MsV0FDWCxXQUFXQyxXQUNYLFdBQVc4QztBQVNmLFdBQVNDLFFBQU0sU0FBUztBQUN0QixRQUFJLE9BQU8sS0FBSyxXQUFXLElBQUksVUFBVSxPQUFPO0FBQ2hELFNBQUssT0FBTyxLQUFLO0FBQUEsRUFDbkI7QUFHQUEsVUFBTSxVQUFVLFFBQVE7QUFDeEJBLFVBQU0sVUFBVSxRQUFRLElBQUk7QUFDNUJBLFVBQU0sVUFBVSxNQUFNO0FBQ3RCQSxVQUFNLFVBQVUsTUFBTTtBQUN0QkEsVUFBTSxVQUFVLE1BQU07QUFFdEIsTUFBQSxTQUFpQkE7QUMxQmpCLE1BQUksWUFBWXpEO0FBRWhCLE1BQUkwRCxtQkFBa0IsV0FBVztBQUMvQixRQUFJO0FBQ0YsVUFBSSxPQUFPLFVBQVUsUUFBUSxnQkFBZ0I7QUFDN0MsV0FBSyxDQUFFLEdBQUUsSUFBSSxDQUFBLENBQUU7QUFDZixhQUFPO0FBQUEsSUFDWCxTQUFXaEcsSUFBUDtBQUFBLElBQVk7QUFBQSxFQUNoQixFQUFDO0FBRUQsTUFBQSxrQkFBaUJnRztBQ1ZqQixNQUFJQSxtQkFBaUIxRDtBQVdyQixXQUFTMkQsa0JBQWdCLFFBQVEsS0FBSyxPQUFPO0FBQzNDLFFBQUksT0FBTyxlQUFlRCxrQkFBZ0I7QUFDeENBLHVCQUFlLFFBQVEsS0FBSztBQUFBLFFBQzFCLGdCQUFnQjtBQUFBLFFBQ2hCLGNBQWM7QUFBQSxRQUNkLFNBQVM7QUFBQSxRQUNULFlBQVk7QUFBQSxNQUNsQixDQUFLO0FBQUEsSUFDTCxPQUFTO0FBQ0wsYUFBTyxHQUFHLElBQUk7QUFBQSxJQUNmO0FBQUEsRUFDSDtBQUVBLE1BQUEsbUJBQWlCQztBQ3hCakIsTUFBSUEsb0JBQWtCM0Qsa0JBQ2xCRCxPQUFLUTtBQVdULFdBQVNxRCxtQkFBaUIsUUFBUSxLQUFLLE9BQU87QUFDNUMsUUFBSyxVQUFVLFVBQWEsQ0FBQzdELEtBQUcsT0FBTyxHQUFHLEdBQUcsS0FBSyxLQUM3QyxVQUFVLFVBQWEsRUFBRSxPQUFPLFNBQVU7QUFDN0M0RCx3QkFBZ0IsUUFBUSxLQUFLLEtBQUs7QUFBQSxJQUNuQztBQUFBLEVBQ0g7QUFFQSxNQUFBLG9CQUFpQkM7QUNaakIsV0FBU0MsZ0JBQWMsV0FBVztBQUNoQyxXQUFPLFNBQVMsUUFBUSxVQUFVLFVBQVU7QUFDMUMsVUFBSTFELFNBQVEsSUFDUixXQUFXLE9BQU8sTUFBTSxHQUN4QixRQUFRLFNBQVMsTUFBTSxHQUN2QixTQUFTLE1BQU07QUFFbkIsYUFBTyxVQUFVO0FBQ2YsWUFBSSxNQUFNLE1BQU0sWUFBWSxTQUFTLEVBQUVBLE1BQUs7QUFDNUMsWUFBSSxTQUFTLFNBQVMsR0FBRyxHQUFHLEtBQUssUUFBUSxNQUFNLE9BQU87QUFDcEQ7QUFBQSxRQUNEO0FBQUEsTUFDRjtBQUNELGFBQU87QUFBQSxJQUNYO0FBQUEsRUFDQTtBQUVBLE1BQUEsaUJBQWlCMEQ7QUN4QmpCLE1BQUksZ0JBQWdCN0Q7QUFhcEIsTUFBSThELFlBQVUsY0FBYTtBQUUzQixNQUFBLFdBQWlCQTs7Ozs7Ozs7Ozs7QUNmakIsUUFBSTVDLFFBQU9sQjtBQUdYLFFBQUksY0FBNEMrRCxZQUFXLENBQUNBLFNBQVEsWUFBWUE7QUFHaEYsUUFBSSxhQUFhLGVBQWUsUUFBNkI5RyxXQUFVLENBQUNBLFFBQU8sWUFBWUE7QUFHM0YsUUFBSSxnQkFBZ0IsY0FBYyxXQUFXLFlBQVk7QUFHekQsUUFBSSxTQUFTLGdCQUFnQmlFLE1BQUssU0FBUyxRQUN2QyxjQUFjLFNBQVMsT0FBTyxjQUFjO0FBVWhELGFBQVM4QyxhQUFZLFFBQVEsUUFBUTtBQUNuQyxVQUFJLFFBQVE7QUFDVixlQUFPLE9BQU87TUFDZjtBQUNELFVBQUksU0FBUyxPQUFPLFFBQ2hCLFNBQVMsY0FBYyxZQUFZLE1BQU0sSUFBSSxJQUFJLE9BQU8sWUFBWSxNQUFNO0FBRTlFLGFBQU8sS0FBSyxNQUFNO0FBQ2xCLGFBQU87QUFBQSxJQUNSO0FBRUQsSUFBQS9HLFFBQUEsVUFBaUIrRztBQUFBO0FDbENqQixNQUFJOUMsU0FBT2xCO0FBR1gsTUFBSWlFLGVBQWEvQyxPQUFLO0FBRXRCLE1BQUEsY0FBaUIrQztBQ0xqQixNQUFJLGFBQWFqRTtBQVNqQixXQUFTa0UsbUJBQWlCLGFBQWE7QUFDckMsUUFBSSxTQUFTLElBQUksWUFBWSxZQUFZLFlBQVksVUFBVTtBQUMvRCxRQUFJLFdBQVcsTUFBTSxFQUFFLElBQUksSUFBSSxXQUFXLFdBQVcsQ0FBQztBQUN0RCxXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUEsb0JBQWlCQTtBQ2ZqQixNQUFJLG1CQUFtQmxFO0FBVXZCLFdBQVNtRSxrQkFBZ0IsWUFBWSxRQUFRO0FBQzNDLFFBQUksU0FBUyxTQUFTLGlCQUFpQixXQUFXLE1BQU0sSUFBSSxXQUFXO0FBQ3ZFLFdBQU8sSUFBSSxXQUFXLFlBQVksUUFBUSxXQUFXLFlBQVksV0FBVyxNQUFNO0FBQUEsRUFDcEY7QUFFQSxNQUFBLG1CQUFpQkE7QUNQakIsV0FBU0MsWUFBVSxRQUFRLE9BQU87QUFDaEMsUUFBSWpFLFNBQVEsSUFDUixTQUFTLE9BQU87QUFFcEIsY0FBVSxRQUFRLE1BQU0sTUFBTTtBQUM5QixXQUFPLEVBQUVBLFNBQVEsUUFBUTtBQUN2QixZQUFNQSxNQUFLLElBQUksT0FBT0EsTUFBSztBQUFBLElBQzVCO0FBQ0QsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFBLGFBQWlCaUU7QUNuQmpCLE1BQUl6QyxhQUFXM0I7QUFHZixNQUFJLGVBQWUsT0FBTztBQVUxQixNQUFJcUUsZUFBYyxXQUFXO0FBQzNCLGFBQVMsU0FBUztBQUFBLElBQUU7QUFDcEIsV0FBTyxTQUFTLE9BQU87QUFDckIsVUFBSSxDQUFDMUMsV0FBUyxLQUFLLEdBQUc7QUFDcEIsZUFBTztNQUNSO0FBQ0QsVUFBSSxjQUFjO0FBQ2hCLGVBQU8sYUFBYSxLQUFLO0FBQUEsTUFDMUI7QUFDRCxhQUFPLFlBQVk7QUFDbkIsVUFBSSxTQUFTLElBQUk7QUFDakIsYUFBTyxZQUFZO0FBQ25CLGFBQU87QUFBQSxJQUNYO0FBQUEsRUFDQSxFQUFDO0FBRUQsTUFBQSxjQUFpQjBDO0FDckJqQixXQUFTQyxVQUFRLE1BQU0sV0FBVztBQUNoQyxXQUFPLFNBQVMsS0FBSztBQUNuQixhQUFPLEtBQUssVUFBVSxHQUFHLENBQUM7QUFBQSxJQUM5QjtBQUFBLEVBQ0E7QUFFQSxNQUFBLFdBQWlCQTtBQ2RqQixNQUFJLFVBQVV0RTtBQUdkLE1BQUl1RSxpQkFBZSxRQUFRLE9BQU8sZ0JBQWdCLE1BQU07QUFFeEQsTUFBQSxnQkFBaUJBO0FDSmpCLE1BQUluRCxnQkFBYyxPQUFPO0FBU3pCLFdBQVNvRCxjQUFZLE9BQU87QUFDMUIsUUFBSSxPQUFPLFNBQVMsTUFBTSxhQUN0QixRQUFTLE9BQU8sUUFBUSxjQUFjLEtBQUssYUFBY3BEO0FBRTdELFdBQU8sVUFBVTtBQUFBLEVBQ25CO0FBRUEsTUFBQSxlQUFpQm9EO0FDakJqQixNQUFJLGFBQWF4RSxhQUNidUUsaUJBQWVoRSxlQUNmaUUsZ0JBQWNoRTtBQVNsQixXQUFTaUUsa0JBQWdCLFFBQVE7QUFDL0IsV0FBUSxPQUFPLE9BQU8sZUFBZSxjQUFjLENBQUNELGNBQVksTUFBTSxJQUNsRSxXQUFXRCxlQUFhLE1BQU0sQ0FBQyxJQUMvQjtFQUNOO0FBRUEsTUFBQSxtQkFBaUJFO0FDT2pCLFdBQVNDLGVBQWEsT0FBTztBQUMzQixXQUFPLFNBQVMsUUFBUSxPQUFPLFNBQVM7QUFBQSxFQUMxQztBQUVBLE1BQUEsaUJBQWlCQTtBQzVCakIsTUFBSWhELGVBQWExQixhQUNiMEUsaUJBQWVuRTtBQUduQixNQUFJb0UsWUFBVTtBQVNkLFdBQVNDLGtCQUFnQixPQUFPO0FBQzlCLFdBQU9GLGVBQWEsS0FBSyxLQUFLaEQsYUFBVyxLQUFLLEtBQUtpRDtBQUFBQSxFQUNyRDtBQUVBLE1BQUEsbUJBQWlCQztBQ2pCakIsTUFBSSxrQkFBa0I1RSxrQkFDbEIwRSxpQkFBZW5FO0FBR25CLE1BQUlhLGdCQUFjLE9BQU87QUFHekIsTUFBSUMsbUJBQWlCRCxjQUFZO0FBR2pDLE1BQUksdUJBQXVCQSxjQUFZO0FBb0J2QyxNQUFJeUQsZ0JBQWMsZ0JBQWdCLFdBQVc7QUFBRSxXQUFPO0FBQUEsRUFBVSxHQUFJLElBQUksa0JBQWtCLFNBQVMsT0FBTztBQUN4RyxXQUFPSCxlQUFhLEtBQUssS0FBS3JELGlCQUFlLEtBQUssT0FBTyxRQUFRLEtBQy9ELENBQUMscUJBQXFCLEtBQUssT0FBTyxRQUFRO0FBQUEsRUFDOUM7QUFFQSxNQUFBLGdCQUFpQndEO0FDWmpCLE1BQUlDLFlBQVUsTUFBTTtBQUVwQixNQUFBLFlBQWlCQTtBQ3hCakIsTUFBSUMscUJBQW1CO0FBNEJ2QixXQUFTQyxXQUFTLE9BQU87QUFDdkIsV0FBTyxPQUFPLFNBQVMsWUFDckIsUUFBUSxNQUFNLFFBQVEsS0FBSyxLQUFLLFNBQVNEO0FBQUFBLEVBQzdDO0FBRUEsTUFBQSxhQUFpQkM7QUNsQ2pCLE1BQUluRCxlQUFhN0IsY0FDYmdGLGFBQVd6RTtBQTJCZixXQUFTMEUsY0FBWSxPQUFPO0FBQzFCLFdBQU8sU0FBUyxRQUFRRCxXQUFTLE1BQU0sTUFBTSxLQUFLLENBQUNuRCxhQUFXLEtBQUs7QUFBQSxFQUNyRTtBQUVBLE1BQUEsZ0JBQWlCb0Q7QUNoQ2pCLE1BQUlBLGdCQUFjakYsZUFDZDBFLGlCQUFlbkU7QUEyQm5CLFdBQVMyRSxvQkFBa0IsT0FBTztBQUNoQyxXQUFPUixlQUFhLEtBQUssS0FBS08sY0FBWSxLQUFLO0FBQUEsRUFDakQ7QUFFQSxNQUFBLHNCQUFpQkM7Ozs7Ozs7Ozs7QUNuQmpCLFdBQVMsWUFBWTtBQUNuQixXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUEsY0FBaUI7O0FDakJqQixRQUFJaEUsUUFBT2xCLE9BQ1BtRixhQUFZNUU7QUFHaEIsUUFBSSxjQUE0Q3dELFlBQVcsQ0FBQ0EsU0FBUSxZQUFZQTtBQUdoRixRQUFJLGFBQWEsZUFBZSxRQUE2QjlHLFdBQVUsQ0FBQ0EsUUFBTyxZQUFZQTtBQUczRixRQUFJLGdCQUFnQixjQUFjLFdBQVcsWUFBWTtBQUd6RCxRQUFJLFNBQVMsZ0JBQWdCaUUsTUFBSyxTQUFTO0FBRzNDLFFBQUksaUJBQWlCLFNBQVMsT0FBTyxXQUFXO0FBbUJoRCxRQUFJa0UsWUFBVyxrQkFBa0JEO0FBRWpDLElBQUFsSSxRQUFBLFVBQWlCbUk7QUFBQTtBQ3JDakIsTUFBSTFELGVBQWExQixhQUNiLGVBQWVPLGVBQ2ZtRSxpQkFBZWxFO0FBR25CLE1BQUk2RSxjQUFZO0FBR2hCLE1BQUksWUFBWSxTQUFTLFdBQ3JCakUsZ0JBQWMsT0FBTztBQUd6QixNQUFJLGVBQWUsVUFBVTtBQUc3QixNQUFJQyxtQkFBaUJELGNBQVk7QUFHakMsTUFBSSxtQkFBbUIsYUFBYSxLQUFLLE1BQU07QUE4Qi9DLFdBQVNrRSxnQkFBYyxPQUFPO0FBQzVCLFFBQUksQ0FBQ1osZUFBYSxLQUFLLEtBQUtoRCxhQUFXLEtBQUssS0FBSzJELGFBQVc7QUFDMUQsYUFBTztBQUFBLElBQ1I7QUFDRCxRQUFJLFFBQVEsYUFBYSxLQUFLO0FBQzlCLFFBQUksVUFBVSxNQUFNO0FBQ2xCLGFBQU87QUFBQSxJQUNSO0FBQ0QsUUFBSSxPQUFPaEUsaUJBQWUsS0FBSyxPQUFPLGFBQWEsS0FBSyxNQUFNO0FBQzlELFdBQU8sT0FBTyxRQUFRLGNBQWMsZ0JBQWdCLFFBQ2xELGFBQWEsS0FBSyxJQUFJLEtBQUs7QUFBQSxFQUMvQjtBQUVBLE1BQUEsa0JBQWlCaUU7QUM3RGpCLE1BQUksYUFBYXRGLGFBQ2IsV0FBV08sWUFDWCxlQUFlQztBQUduQixNQUFJLFVBQVUsc0JBQ1YsV0FBVyxrQkFDWCxVQUFVLG9CQUNWLFVBQVUsaUJBQ1YsV0FBVyxrQkFDWCxVQUFVLHFCQUNWLFNBQVMsZ0JBQ1QsWUFBWSxtQkFDWixZQUFZLG1CQUNaLFlBQVksbUJBQ1osU0FBUyxnQkFDVCxZQUFZLG1CQUNaLGFBQWE7QUFFakIsTUFBSSxpQkFBaUIsd0JBQ2pCLGNBQWMscUJBQ2QsYUFBYSx5QkFDYixhQUFhLHlCQUNiLFVBQVUsc0JBQ1YsV0FBVyx1QkFDWCxXQUFXLHVCQUNYLFdBQVcsdUJBQ1gsa0JBQWtCLDhCQUNsQixZQUFZLHdCQUNaLFlBQVk7QUFHaEIsTUFBSSxpQkFBaUIsQ0FBQTtBQUNyQixpQkFBZSxVQUFVLElBQUksZUFBZSxVQUFVLElBQ3RELGVBQWUsT0FBTyxJQUFJLGVBQWUsUUFBUSxJQUNqRCxlQUFlLFFBQVEsSUFBSSxlQUFlLFFBQVEsSUFDbEQsZUFBZSxlQUFlLElBQUksZUFBZSxTQUFTLElBQzFELGVBQWUsU0FBUyxJQUFJO0FBQzVCLGlCQUFlLE9BQU8sSUFBSSxlQUFlLFFBQVEsSUFDakQsZUFBZSxjQUFjLElBQUksZUFBZSxPQUFPLElBQ3ZELGVBQWUsV0FBVyxJQUFJLGVBQWUsT0FBTyxJQUNwRCxlQUFlLFFBQVEsSUFBSSxlQUFlLE9BQU8sSUFDakQsZUFBZSxNQUFNLElBQUksZUFBZSxTQUFTLElBQ2pELGVBQWUsU0FBUyxJQUFJLGVBQWUsU0FBUyxJQUNwRCxlQUFlLE1BQU0sSUFBSSxlQUFlLFNBQVMsSUFDakQsZUFBZSxVQUFVLElBQUk7QUFTN0IsV0FBUytFLG1CQUFpQixPQUFPO0FBQy9CLFdBQU8sYUFBYSxLQUFLLEtBQ3ZCLFNBQVMsTUFBTSxNQUFNLEtBQUssQ0FBQyxDQUFDLGVBQWUsV0FBVyxLQUFLLENBQUM7QUFBQSxFQUNoRTtBQUVBLE1BQUEsb0JBQWlCQTtBQ3BEakIsV0FBU0MsWUFBVSxNQUFNO0FBQ3ZCLFdBQU8sU0FBUyxPQUFPO0FBQ3JCLGFBQU8sS0FBSyxLQUFLO0FBQUEsSUFDckI7QUFBQSxFQUNBO0FBRUEsTUFBQSxhQUFpQkE7Ozs7Ozs7Ozs7O0FDYmpCLFFBQUl4RSxjQUFhaEI7QUFHakIsUUFBSSxjQUE0QytELFlBQVcsQ0FBQ0EsU0FBUSxZQUFZQTtBQUdoRixRQUFJLGFBQWEsZUFBZSxRQUE2QjlHLFdBQVUsQ0FBQ0EsUUFBTyxZQUFZQTtBQUczRixRQUFJLGdCQUFnQixjQUFjLFdBQVcsWUFBWTtBQUd6RCxRQUFJLGNBQWMsaUJBQWlCK0QsWUFBVztBQUc5QyxRQUFJeUUsWUFBWSxXQUFXO0FBQ3pCLFVBQUk7QUFFRixZQUFJLFFBQVEsY0FBYyxXQUFXLFdBQVcsV0FBVyxRQUFRLE1BQU0sRUFBRTtBQUUzRSxZQUFJLE9BQU87QUFDVCxpQkFBTztBQUFBLFFBQ1I7QUFHRCxlQUFPLGVBQWUsWUFBWSxXQUFXLFlBQVksUUFBUSxNQUFNO0FBQUEsTUFDM0UsU0FBVy9ILElBQVA7QUFBQSxNQUFZO0FBQUEsSUFDZixFQUFBO0FBRUQsSUFBQVQsUUFBQSxVQUFpQndJO0FBQUE7QUM3QmpCLE1BQUksbUJBQW1CekYsbUJBQ25CLFlBQVlPLFlBQ1osV0FBV0M7QUFHZixNQUFJLG1CQUFtQixZQUFZLFNBQVM7QUFtQjVDLE1BQUlrRixpQkFBZSxtQkFBbUIsVUFBVSxnQkFBZ0IsSUFBSTtBQUVwRSxNQUFBLGlCQUFpQkE7QUNsQmpCLFdBQVNDLFVBQVEsUUFBUSxLQUFLO0FBQzVCLFFBQUksUUFBUSxpQkFBaUIsT0FBTyxPQUFPLEdBQUcsTUFBTSxZQUFZO0FBQzlEO0FBQUEsSUFDRDtBQUVELFFBQUksT0FBTyxhQUFhO0FBQ3RCO0FBQUEsSUFDRDtBQUVELFdBQU8sT0FBTyxHQUFHO0FBQUEsRUFDbkI7QUFFQSxNQUFBLFdBQWlCQTtBQ3BCakIsTUFBSWhDLG9CQUFrQjNELGtCQUNsQkQsT0FBS1E7QUFHVCxNQUFJYSxnQkFBYyxPQUFPO0FBR3pCLE1BQUlDLG1CQUFpQkQsY0FBWTtBQVlqQyxXQUFTd0UsY0FBWSxRQUFRLEtBQUssT0FBTztBQUN2QyxRQUFJLFdBQVcsT0FBTyxHQUFHO0FBQ3pCLFFBQUksRUFBRXZFLGlCQUFlLEtBQUssUUFBUSxHQUFHLEtBQUt0QixLQUFHLFVBQVUsS0FBSyxNQUN2RCxVQUFVLFVBQWEsRUFBRSxPQUFPLFNBQVU7QUFDN0M0RCx3QkFBZ0IsUUFBUSxLQUFLLEtBQUs7QUFBQSxJQUNuQztBQUFBLEVBQ0g7QUFFQSxNQUFBLGVBQWlCaUM7QUMzQmpCLE1BQUksY0FBYzVGLGNBQ2Qsa0JBQWtCTztBQVl0QixXQUFTc0YsYUFBVyxRQUFRLE9BQU8sUUFBUSxZQUFZO0FBQ3JELFFBQUksUUFBUSxDQUFDO0FBQ2IsZUFBVyxTQUFTLENBQUE7QUFFcEIsUUFBSTFGLFNBQVEsSUFDUixTQUFTLE1BQU07QUFFbkIsV0FBTyxFQUFFQSxTQUFRLFFBQVE7QUFDdkIsVUFBSSxNQUFNLE1BQU1BLE1BQUs7QUFFckIsVUFBSSxXQUFXLGFBQ1gsV0FBVyxPQUFPLEdBQUcsR0FBRyxPQUFPLEdBQUcsR0FBRyxLQUFLLFFBQVEsTUFBTSxJQUN4RDtBQUVKLFVBQUksYUFBYSxRQUFXO0FBQzFCLG1CQUFXLE9BQU8sR0FBRztBQUFBLE1BQ3RCO0FBQ0QsVUFBSSxPQUFPO0FBQ1Qsd0JBQWdCLFFBQVEsS0FBSyxRQUFRO0FBQUEsTUFDM0MsT0FBVztBQUNMLG9CQUFZLFFBQVEsS0FBSyxRQUFRO0FBQUEsTUFDbEM7QUFBQSxJQUNGO0FBQ0QsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFBLGNBQWlCMEY7QUM5QmpCLFdBQVNDLFlBQVUsR0FBRyxVQUFVO0FBQzlCLFFBQUkzRixTQUFRLElBQ1IsU0FBUyxNQUFNLENBQUM7QUFFcEIsV0FBTyxFQUFFQSxTQUFRLEdBQUc7QUFDbEIsYUFBT0EsTUFBSyxJQUFJLFNBQVNBLE1BQUs7QUFBQSxJQUMvQjtBQUNELFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBQSxhQUFpQjJGO0FDbEJqQixNQUFJLG1CQUFtQjtBQUd2QixNQUFJLFdBQVc7QUFVZixXQUFTQyxVQUFRLE9BQU8sUUFBUTtBQUM5QixRQUFJLE9BQU8sT0FBTztBQUNsQixhQUFTLFVBQVUsT0FBTyxtQkFBbUI7QUFFN0MsV0FBTyxDQUFDLENBQUMsV0FDTixRQUFRLFlBQ04sUUFBUSxZQUFZLFNBQVMsS0FBSyxLQUFLLE9BQ3JDLFFBQVEsTUFBTSxRQUFRLEtBQUssS0FBSyxRQUFRO0FBQUEsRUFDakQ7QUFFQSxNQUFBLFdBQWlCQTtBQ3hCakIsTUFBSSxZQUFZL0YsWUFDWjZFLGdCQUFjdEUsZUFDZHVFLFlBQVV0RSxXQUNWNEUsYUFBVzNFLGlCQUNYc0YsWUFBVXJGLFVBQ1ZnRixpQkFBZWxDO0FBR25CLE1BQUlwQyxnQkFBYyxPQUFPO0FBR3pCLE1BQUlDLG1CQUFpQkQsY0FBWTtBQVVqQyxXQUFTNEUsZ0JBQWMsT0FBTyxXQUFXO0FBQ3ZDLFFBQUksUUFBUWxCLFVBQVEsS0FBSyxHQUNyQixRQUFRLENBQUMsU0FBU0QsY0FBWSxLQUFLLEdBQ25DLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBU08sV0FBUyxLQUFLLEdBQzNDLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFVBQVVNLGVBQWEsS0FBSyxHQUMxRCxjQUFjLFNBQVMsU0FBUyxVQUFVLFFBQzFDLFNBQVMsY0FBYyxVQUFVLE1BQU0sUUFBUSxNQUFNLElBQUksQ0FBRSxHQUMzRCxTQUFTLE9BQU87QUFFcEIsYUFBUyxPQUFPLE9BQU87QUFDckIsV0FBSyxhQUFhckUsaUJBQWUsS0FBSyxPQUFPLEdBQUcsTUFDNUMsRUFBRTtBQUFBLE9BRUMsT0FBTztBQUFBLE1BRU4sV0FBVyxPQUFPLFlBQVksT0FBTztBQUFBLE1BRXJDLFdBQVcsT0FBTyxZQUFZLE9BQU8sZ0JBQWdCLE9BQU87QUFBQSxNQUU3RDBFLFVBQVEsS0FBSyxNQUFNLEtBQ2xCO0FBQ04sZUFBTyxLQUFLLEdBQUc7QUFBQSxNQUNoQjtBQUFBLElBQ0Y7QUFDRCxXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUEsaUJBQWlCQztBQ3ZDakIsV0FBU0MsZUFBYSxRQUFRO0FBQzVCLFFBQUksU0FBUyxDQUFBO0FBQ2IsUUFBSSxVQUFVLE1BQU07QUFDbEIsZUFBUyxPQUFPLE9BQU8sTUFBTSxHQUFHO0FBQzlCLGVBQU8sS0FBSyxHQUFHO0FBQUEsTUFDaEI7QUFBQSxJQUNGO0FBQ0QsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFBLGdCQUFpQkE7QUNuQmpCLE1BQUl0RSxhQUFXM0IsWUFDWCxjQUFjTyxjQUNkLGVBQWVDO0FBR25CLE1BQUksY0FBYyxPQUFPO0FBR3pCLE1BQUksaUJBQWlCLFlBQVk7QUFTakMsV0FBUzBGLGFBQVcsUUFBUTtBQUMxQixRQUFJLENBQUN2RSxXQUFTLE1BQU0sR0FBRztBQUNyQixhQUFPLGFBQWEsTUFBTTtBQUFBLElBQzNCO0FBQ0QsUUFBSSxVQUFVLFlBQVksTUFBTSxHQUM1QixTQUFTLENBQUE7QUFFYixhQUFTLE9BQU8sUUFBUTtBQUN0QixVQUFJLEVBQUUsT0FBTyxrQkFBa0IsV0FBVyxDQUFDLGVBQWUsS0FBSyxRQUFRLEdBQUcsS0FBSztBQUM3RSxlQUFPLEtBQUssR0FBRztBQUFBLE1BQ2hCO0FBQUEsSUFDRjtBQUNELFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBQSxjQUFpQnVFO0FDaENqQixNQUFJLGdCQUFnQmxHLGdCQUNoQixhQUFhTyxhQUNiMEUsZ0JBQWN6RTtBQXlCbEIsV0FBUzJGLFNBQU8sUUFBUTtBQUN0QixXQUFPbEIsY0FBWSxNQUFNLElBQUksY0FBYyxRQUFRLElBQUksSUFBSSxXQUFXLE1BQU07QUFBQSxFQUM5RTtBQUVBLE1BQUEsV0FBaUJrQjtBQy9CakIsTUFBSSxhQUFhbkcsYUFDYm1HLFdBQVM1RjtBQTBCYixXQUFTNkYsZ0JBQWMsT0FBTztBQUM1QixXQUFPLFdBQVcsT0FBT0QsU0FBTyxLQUFLLENBQUM7QUFBQSxFQUN4QztBQUVBLE1BQUEsa0JBQWlCQztBQy9CakIsTUFBSXhDLHFCQUFtQjVELG1CQUNuQixjQUFjTyxxQkFDZCxrQkFBa0JDLGtCQUNsQixZQUFZQyxZQUNaLGtCQUFrQkMsa0JBQ2xCLGNBQWM4QyxlQUNkLFVBQVU2QyxXQUNWLG9CQUFvQkMscUJBQ3BCLFdBQVdDLGlCQUNYLGFBQWFDLGNBQ2I3RSxhQUFXOEUsWUFDWCxnQkFBZ0JDLGlCQUNoQixlQUFlQyxnQkFDZmhCLFlBQVVpQixVQUNWLGdCQUFnQkM7QUFpQnBCLFdBQVNDLGdCQUFjLFFBQVEsUUFBUSxLQUFLLFVBQVUsV0FBVyxZQUFZLE9BQU87QUFDbEYsUUFBSSxXQUFXbkIsVUFBUSxRQUFRLEdBQUcsR0FDOUIsV0FBV0EsVUFBUSxRQUFRLEdBQUcsR0FDOUIsVUFBVSxNQUFNLElBQUksUUFBUTtBQUVoQyxRQUFJLFNBQVM7QUFDWC9CLHlCQUFpQixRQUFRLEtBQUssT0FBTztBQUNyQztBQUFBLElBQ0Q7QUFDRCxRQUFJLFdBQVcsYUFDWCxXQUFXLFVBQVUsVUFBVyxNQUFNLElBQUssUUFBUSxRQUFRLEtBQUssSUFDaEU7QUFFSixRQUFJLFdBQVcsYUFBYTtBQUU1QixRQUFJLFVBQVU7QUFDWixVQUFJLFFBQVEsUUFBUSxRQUFRLEdBQ3hCLFNBQVMsQ0FBQyxTQUFTLFNBQVMsUUFBUSxHQUNwQyxVQUFVLENBQUMsU0FBUyxDQUFDLFVBQVUsYUFBYSxRQUFRO0FBRXhELGlCQUFXO0FBQ1gsVUFBSSxTQUFTLFVBQVUsU0FBUztBQUM5QixZQUFJLFFBQVEsUUFBUSxHQUFHO0FBQ3JCLHFCQUFXO0FBQUEsUUFDWixXQUNRLGtCQUFrQixRQUFRLEdBQUc7QUFDcEMscUJBQVcsVUFBVSxRQUFRO0FBQUEsUUFDOUIsV0FDUSxRQUFRO0FBQ2YscUJBQVc7QUFDWCxxQkFBVyxZQUFZLFVBQVUsSUFBSTtBQUFBLFFBQ3RDLFdBQ1EsU0FBUztBQUNoQixxQkFBVztBQUNYLHFCQUFXLGdCQUFnQixVQUFVLElBQUk7QUFBQSxRQUMxQyxPQUNJO0FBQ0gscUJBQVcsQ0FBQTtBQUFBLFFBQ1o7QUFBQSxNQUNGLFdBQ1EsY0FBYyxRQUFRLEtBQUssWUFBWSxRQUFRLEdBQUc7QUFDekQsbUJBQVc7QUFDWCxZQUFJLFlBQVksUUFBUSxHQUFHO0FBQ3pCLHFCQUFXLGNBQWMsUUFBUTtBQUFBLFFBQ2xDLFdBQ1EsQ0FBQ2pDLFdBQVMsUUFBUSxLQUFLLFdBQVcsUUFBUSxHQUFHO0FBQ3BELHFCQUFXLGdCQUFnQixRQUFRO0FBQUEsUUFDcEM7QUFBQSxNQUNGLE9BQ0k7QUFDSCxtQkFBVztBQUFBLE1BQ1o7QUFBQSxJQUNGO0FBQ0QsUUFBSSxVQUFVO0FBRVosWUFBTSxJQUFJLFVBQVUsUUFBUTtBQUM1QixnQkFBVSxVQUFVLFVBQVUsVUFBVSxZQUFZLEtBQUs7QUFDekQsWUFBTSxRQUFRLEVBQUUsUUFBUTtBQUFBLElBQ3pCO0FBQ0RpQyx1QkFBaUIsUUFBUSxLQUFLLFFBQVE7QUFBQSxFQUN4QztBQUVBLE1BQUEsaUJBQWlCa0Q7QUM3RmpCLE1BQUksUUFBUTlHLFFBQ1IsbUJBQW1CTyxtQkFDbkIsVUFBVUMsVUFDVixnQkFBZ0JDLGdCQUNoQmtCLGFBQVdqQixZQUNYLFNBQVM4QyxVQUNULFVBQVU2QztBQWFkLFdBQVNVLFlBQVUsUUFBUSxRQUFRLFVBQVUsWUFBWSxPQUFPO0FBQzlELFFBQUksV0FBVyxRQUFRO0FBQ3JCO0FBQUEsSUFDRDtBQUNELFlBQVEsUUFBUSxTQUFTLFVBQVUsS0FBSztBQUN0QyxnQkFBVSxRQUFRLElBQUk7QUFDdEIsVUFBSXBGLFdBQVMsUUFBUSxHQUFHO0FBQ3RCLHNCQUFjLFFBQVEsUUFBUSxLQUFLLFVBQVVvRixhQUFXLFlBQVksS0FBSztBQUFBLE1BQzFFLE9BQ0k7QUFDSCxZQUFJLFdBQVcsYUFDWCxXQUFXLFFBQVEsUUFBUSxHQUFHLEdBQUcsVUFBVyxNQUFNLElBQUssUUFBUSxRQUFRLEtBQUssSUFDNUU7QUFFSixZQUFJLGFBQWEsUUFBVztBQUMxQixxQkFBVztBQUFBLFFBQ1o7QUFDRCx5QkFBaUIsUUFBUSxLQUFLLFFBQVE7QUFBQSxNQUN2QztBQUFBLElBQ0YsR0FBRSxNQUFNO0FBQUEsRUFDWDtBQUVBLE1BQUEsYUFBaUJBO0FDekJqQixXQUFTQyxXQUFTLE9BQU87QUFDdkIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFBLGFBQWlCQTtBQ1ZqQixXQUFTQyxRQUFNLE1BQU0sU0FBUyxNQUFNO0FBQ2xDLFlBQVEsS0FBSyxRQUFNO0FBQUEsTUFDakIsS0FBSztBQUFHLGVBQU8sS0FBSyxLQUFLLE9BQU87QUFBQSxNQUNoQyxLQUFLO0FBQUcsZUFBTyxLQUFLLEtBQUssU0FBUyxLQUFLLENBQUMsQ0FBQztBQUFBLE1BQ3pDLEtBQUs7QUFBRyxlQUFPLEtBQUssS0FBSyxTQUFTLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQUEsTUFDbEQsS0FBSztBQUFHLGVBQU8sS0FBSyxLQUFLLFNBQVMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFBQSxJQUM1RDtBQUNELFdBQU8sS0FBSyxNQUFNLFNBQVMsSUFBSTtBQUFBLEVBQ2pDO0FBRUEsTUFBQSxTQUFpQkE7QUNwQmpCLE1BQUksUUFBUWpIO0FBR1osTUFBSSxZQUFZLEtBQUs7QUFXckIsV0FBU2tILFdBQVMsTUFBTSxPQUFPLFdBQVc7QUFDeEMsWUFBUSxVQUFVLFVBQVUsU0FBYSxLQUFLLFNBQVMsSUFBSyxPQUFPLENBQUM7QUFDcEUsV0FBTyxXQUFXO0FBQ2hCLFVBQUksT0FBTyxXQUNQL0csU0FBUSxJQUNSLFNBQVMsVUFBVSxLQUFLLFNBQVMsT0FBTyxDQUFDLEdBQ3pDLFFBQVEsTUFBTSxNQUFNO0FBRXhCLGFBQU8sRUFBRUEsU0FBUSxRQUFRO0FBQ3ZCLGNBQU1BLE1BQUssSUFBSSxLQUFLLFFBQVFBLE1BQUs7QUFBQSxNQUNsQztBQUNELE1BQUFBLFNBQVE7QUFDUixVQUFJLFlBQVksTUFBTSxRQUFRLENBQUM7QUFDL0IsYUFBTyxFQUFFQSxTQUFRLE9BQU87QUFDdEIsa0JBQVVBLE1BQUssSUFBSSxLQUFLQSxNQUFLO0FBQUEsTUFDOUI7QUFDRCxnQkFBVSxLQUFLLElBQUksVUFBVSxLQUFLO0FBQ2xDLGFBQU8sTUFBTSxNQUFNLE1BQU0sU0FBUztBQUFBLElBQ3RDO0FBQUEsRUFDQTtBQUVBLE1BQUEsWUFBaUIrRztBQ2hCakIsV0FBU0MsV0FBUyxPQUFPO0FBQ3ZCLFdBQU8sV0FBVztBQUNoQixhQUFPO0FBQUEsSUFDWDtBQUFBLEVBQ0E7QUFFQSxNQUFBLGFBQWlCQTtBQ3pCakIsTUFBSSxXQUFXbkgsWUFDWCxpQkFBaUJPLGlCQUNqQnlHLGFBQVd4RztBQVVmLE1BQUk0RyxvQkFBa0IsQ0FBQyxpQkFBaUJKLGFBQVcsU0FBUyxNQUFNLFFBQVE7QUFDeEUsV0FBTyxlQUFlLE1BQU0sWUFBWTtBQUFBLE1BQ3RDLGdCQUFnQjtBQUFBLE1BQ2hCLGNBQWM7QUFBQSxNQUNkLFNBQVMsU0FBUyxNQUFNO0FBQUEsTUFDeEIsWUFBWTtBQUFBLElBQ2hCLENBQUc7QUFBQSxFQUNIO0FBRUEsTUFBQSxtQkFBaUJJO0FDcEJqQixNQUFJLFlBQVksS0FDWixXQUFXO0FBR2YsTUFBSSxZQUFZLEtBQUs7QUFXckIsV0FBU0MsV0FBUyxNQUFNO0FBQ3RCLFFBQUksUUFBUSxHQUNSLGFBQWE7QUFFakIsV0FBTyxXQUFXO0FBQ2hCLFVBQUksUUFBUSxVQUFXLEdBQ25CLFlBQVksWUFBWSxRQUFRO0FBRXBDLG1CQUFhO0FBQ2IsVUFBSSxZQUFZLEdBQUc7QUFDakIsWUFBSSxFQUFFLFNBQVMsV0FBVztBQUN4QixpQkFBTyxVQUFVLENBQUM7QUFBQSxRQUNuQjtBQUFBLE1BQ1AsT0FBVztBQUNMLGdCQUFRO0FBQUEsTUFDVDtBQUNELGFBQU8sS0FBSyxNQUFNLFFBQVcsU0FBUztBQUFBLElBQzFDO0FBQUEsRUFDQTtBQUVBLE1BQUEsWUFBaUJBO0FDcENqQixNQUFJLGtCQUFrQnJILGtCQUNsQixXQUFXTztBQVVmLE1BQUkrRyxnQkFBYyxTQUFTLGVBQWU7QUFFMUMsTUFBQSxlQUFpQkE7QUNiakIsTUFBSSxXQUFXdEgsWUFDWCxXQUFXTyxXQUNYLGNBQWNDO0FBVWxCLFdBQVMrRyxXQUFTLE1BQU0sT0FBTztBQUM3QixXQUFPLFlBQVksU0FBUyxNQUFNLE9BQU8sUUFBUSxHQUFHLE9BQU8sRUFBRTtBQUFBLEVBQy9EO0FBRUEsTUFBQSxZQUFpQkE7QUNoQmpCLE1BQUksS0FBS3ZILE1BQ0wsY0FBY08sZUFDZCxVQUFVQyxVQUNWLFdBQVdDO0FBWWYsV0FBUytHLGlCQUFlLE9BQU9ySCxRQUFPLFFBQVE7QUFDNUMsUUFBSSxDQUFDLFNBQVMsTUFBTSxHQUFHO0FBQ3JCLGFBQU87QUFBQSxJQUNSO0FBQ0QsUUFBSSxPQUFPLE9BQU9BO0FBQ2xCLFFBQUksUUFBUSxXQUNILFlBQVksTUFBTSxLQUFLLFFBQVFBLFFBQU8sT0FBTyxNQUFNLElBQ25ELFFBQVEsWUFBWUEsVUFBUyxRQUNoQztBQUNKLGFBQU8sR0FBRyxPQUFPQSxNQUFLLEdBQUcsS0FBSztBQUFBLElBQy9CO0FBQ0QsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFBLGtCQUFpQnFIO0FDN0JqQixNQUFJLFdBQVd4SCxXQUNYLGlCQUFpQk87QUFTckIsV0FBU2tILGlCQUFlLFVBQVU7QUFDaEMsV0FBTyxTQUFTLFNBQVMsUUFBUSxTQUFTO0FBQ3hDLFVBQUl0SCxTQUFRLElBQ1IsU0FBUyxRQUFRLFFBQ2pCLGFBQWEsU0FBUyxJQUFJLFFBQVEsU0FBUyxDQUFDLElBQUksUUFDaEQsUUFBUSxTQUFTLElBQUksUUFBUSxDQUFDLElBQUk7QUFFdEMsbUJBQWMsU0FBUyxTQUFTLEtBQUssT0FBTyxjQUFjLGNBQ3JELFVBQVUsY0FDWDtBQUVKLFVBQUksU0FBUyxlQUFlLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEtBQUssR0FBRztBQUMxRCxxQkFBYSxTQUFTLElBQUksU0FBWTtBQUN0QyxpQkFBUztBQUFBLE1BQ1Y7QUFDRCxlQUFTLE9BQU8sTUFBTTtBQUN0QixhQUFPLEVBQUVBLFNBQVEsUUFBUTtBQUN2QixZQUFJLFNBQVMsUUFBUUEsTUFBSztBQUMxQixZQUFJLFFBQVE7QUFDVixtQkFBUyxRQUFRLFFBQVFBLFFBQU8sVUFBVTtBQUFBLFFBQzNDO0FBQUEsTUFDRjtBQUNELGFBQU87QUFBQSxJQUNYLENBQUc7QUFBQSxFQUNIO0FBRUEsTUFBQSxrQkFBaUJzSDtBQ3BDakIsTUFBSSxZQUFZekgsWUFDWixpQkFBaUJPO0FBaUNULGlCQUFlLFNBQVMsUUFBUSxRQUFRLFVBQVU7QUFDNUQsY0FBVSxRQUFRLFFBQVEsUUFBUTtBQUFBLEVBQ3BDLENBQUM7QUM5QlltSCxRQUFBQSxhQUFZQSxDQUFDQyxZQUErQjtBQUN2RCxVQUFNQyxRQUFPQyxTQUFTQyxxQkFBcUIsTUFBTSxFQUFFLENBQUM7QUFDOUNDLFVBQUFBLE9BQU9GLFNBQVNHLGNBQWMsTUFBTTtBQUUxQ0MsV0FBT0MsUUFBUVAsT0FBTyxFQUFFUSxRQUFRLENBQUMsQ0FBQ0MsS0FBS2hKLEtBQUssTUFBTTJJLEtBQUtNLGFBQWFELEtBQUtoSixLQUFLLENBQUM7QUFFL0V3SSxJQUFBQSxNQUFLVSxZQUFZUCxJQUFJO0FBQUEsRUFDdkI7QUNUYVEsUUFBQUEsV0FBV0EsQ0FBQ0MsT0FBZ0JDLFlBQTBCO0FBQzdEQyxRQUFBQSxNQUFNNUQsUUFBUTBELEtBQUssR0FBRztBQUNqQkEsYUFBQUEsTUFBTUcsSUFBSSxDQUFDQyxJQUFJekksV0FBVW9JLFNBQVNFLFFBQVF0SSxRQUFPeUksRUFBRSxHQUFHSCxPQUFPLENBQUM7QUFBQSxJQUN2RTtBQUVJLFFBQUEsT0FBT0QsVUFBVSxZQUFZQSxPQUFPO0FBQy9CUCxhQUFBQSxPQUFPQyxRQUFRTSxLQUFLLEVBQUVLLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDVixLQUFLaEosS0FBSyxNQUFNO0FBQ3pEMEosWUFBSVYsR0FBRyxJQUFJRyxTQUFTRSxRQUFRTCxLQUFLaEosS0FBSyxHQUFHcUosT0FBTztBQUV6Q0ssZUFBQUE7QUFBQUEsTUFDVCxHQUFHLENBQVUsQ0FBQTtBQUFBLElBQ2Y7QUFFT04sV0FBQUE7QUFBQUEsRUFDVDtBQ2ZPLFFBQU1PLGVBQWVBLENBQUMzSixVQUMzQixDQUFDQSxVQUFVQSxVQUFVLFFBQVFBLFVBQVU0SjtBQUNsQyxRQUFNQyxVQUFVLENBQUk3SixVQUFvRCxDQUFDMkosYUFBYTNKLEtBQUs7QUFVckY4SixRQUFBQSxPQUFPLENBQTJCQyxRQUFnQkMsVUFBNEI7QUFDekYsV0FBT0EsTUFBTVAsT0FBTyxDQUFDUSxRQUFRQyxTQUFTO0FBQzdCQSxhQUFBQSxJQUFJLElBQUlILElBQUlHLElBQUk7QUFDaEJELGFBQUFBO0FBQUFBLElBQ1QsR0FBRyxDQUFVLENBQUE7QUFBQSxFQUNmO0FBRWdCRSxXQUFBQSxLQUE4Q0osUUFBV0MsT0FBOEI7QUFDckcsVUFBTUMsU0FBUztBQUFBLE1BQUUsR0FBR0Y7QUFBQUEsSUFBQUE7QUFDcEJDLFVBQU1qQixRQUFRbUIsQ0FBUSxTQUFBO0FBQ3BCLGFBQU9ELE9BQU9DLElBQUk7QUFBQSxJQUFBLENBQ25CO0FBQ01ELFdBQUFBO0FBQUFBLEVBQ1Q7QUFFTyxRQUFNRyxNQUFNQSxDQUFDTCxLQUFnQk0sTUFBY0MsYUFBNEI7QUFDNUUsUUFBSSxDQUFDRDtBQUFhVCxhQUFBQTtBQUNaVyxVQUFBQSxZQUFhakIsTUFBTTVELFFBQVEyRSxJQUFJLElBQUlBLE9BQU9BLEtBQUtHLE1BQU0sYUFBYTtBQUNsRVAsVUFBQUEsU0FBU00sVUFBVWQsT0FBTyxDQUFDZ0IsU0FBb0J6QixRQUFnQnlCLFdBQVdBLFFBQVF6QixHQUFHLEdBQUdlLEdBQUc7QUFFMUZFLFdBQUFBLFdBQVdMLFNBQVlVLFdBQVdMO0FBQUFBLEVBQzNDO0FBRU8sUUFBTVMsTUFBTUEsQ0FBQ1gsS0FBZ0JNLE1BQWNySyxVQUFtQjtBQUM3RHVLLFVBQUFBLFlBQWFqQixNQUFNNUQsUUFBUTJFLElBQUksSUFBSUEsT0FBT0EsS0FBS0csTUFBTSxhQUFhO0FBRXhFLFdBQU9ELFVBQVVkLE9BQU8sQ0FBQ0MsS0FBS1YsS0FBS3JMLE9BQU07QUFDbkMrTCxVQUFBQSxJQUFJVixHQUFHLE1BQU1ZO0FBQWVaLFlBQUFBLEdBQUcsSUFBSTtBQUNuQ3JMLFVBQUFBLE9BQU00TSxVQUFVSSxTQUFTO0FBQUdqQixZQUFJVixHQUFHLElBQUloSjtBQUMzQyxhQUFPMEosSUFBSVYsR0FBRztBQUFBLE9BQ2JlLEdBQUc7QUFBQSxFQUNSO0FBRWFhLFFBQUFBLFdBQVdBLENBQUNDLFFBQWdCO0FBQ2pDQyxVQUFBQSxRQUFRRCxJQUFJRSxNQUFNLENBQUM7QUFFckJELFFBQUFBLE1BQU1ILFdBQVcsR0FBRztBQUNoQkcsWUFBQUEsTUFDSEUsTUFBTSxFQUFFLEVBQ1J6QixJQUFJMEIsQ0FBUSxRQUFBLEdBQUVBLE1BQU1BLEtBQUssRUFDekJDLEtBQUssRUFBRTtBQUFBLElBQ1o7QUFFTWpCLFVBQUFBLFNBQVMsNENBQTRDa0IsS0FBS04sR0FBRztBQUVuRSxXQUFPWixTQUNIO0FBQUEsTUFDRTlMLEdBQUdpTixTQUFTbkIsT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUFBLE1BQ3pCdEwsR0FBR3lNLFNBQVNuQixPQUFPLENBQUMsR0FBRyxFQUFFO0FBQUEsTUFDekJvQixHQUFHRCxTQUFTbkIsT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUFBLElBRTNCTCxJQUFBQTtBQUFBQSxFQUNOO0FBRWEwQixRQUFBQSxhQUFhQSxJQUFJQyxXQUFzQjtBQUNsRCxXQUFPQSxPQUFPaEMsSUFBSXZKLENBQUFBLFVBQVN3TCxLQUFLQyxVQUFVekwsS0FBSyxDQUFDLEVBQUUwTCxNQUFNLENBQUNULEtBQUsxTSxJQUFHb04sUUFBUVYsUUFBUVUsSUFBSSxDQUFDLENBQUM7QUFBQSxFQUN6RjtBQUVPLFFBQU1DLFlBQVlBLENBQUNDLEtBQWFDLFFBQVEsTUFBY0QsSUFBSUUsUUFBUSxLQUFNLEtBQUlELFFBQVEsRUFBRUMsUUFBUSxPQUFPLE1BQU07QUFJM0csUUFBTUMsVUFBVSxDQUFDLFdBQVcsVUFBVSxVQUFVLFFBQVE7QUFFeEQsUUFBTUMsY0FBYztBQUFBLElBQ3pCQyxRQUFRO0FBQUEsSUFDUkMsUUFBUTtBQUFBLElBQ1JDLFFBQVE7QUFBQSxJQUNSQyxTQUFTO0FBQUEsRUFDWDtBQ2pGQSxRQUFNQyxlQUFlQSxDQUFDaE0sUUFBbUIsQ0FBQSxNQUN2QyxPQUFPQSxVQUFVLFlBQVl1SixRQUFRdkosS0FBSyxLQUFLMEwsUUFBUU4sTUFBTWEsQ0FBQUEsV0FBVUEsVUFBVWpNLEtBQUs7QUFFM0VrTSxRQUFBQSxXQUFXLENBQ3RCbE0sT0FDQWlNLFdBQ2tDO0FBQ2xDLFFBQUksQ0FBQ2pNO0FBQWNBLGFBQUFBO0FBRW5CLFdBQU82SSxTQUFTN0ksT0FBTyxDQUFDbU0sTUFBTXpNLFVBQWU7QUFDdkNzTSxVQUFBQSxhQUFhdE0sS0FBSyxHQUFHO0FBQ2pCME0sY0FBQUEsY0FBYzFNLE1BQU11TSxNQUFNO0FBQ2hDLFlBQUksWUFBWUcsZUFBZTdDLFFBQVE2QyxZQUFZQyxNQUFNLEdBQUc7QUFDbkQzTSxpQkFBQUEsTUFBTTBNLFlBQVlDLE1BQU07QUFBQSxRQUNqQztBQUNPRCxlQUFBQTtBQUFBQSxNQUNUO0FBRU8xTSxhQUFBQTtBQUFBQSxJQUFBQSxDQUNSO0FBQUEsRUFDSDtBQ25CTyxRQUFNNE0sY0FBYyxDQUFrRHRNLE9BQWVpTSxXQUMxRkMsU0FBMEJsTSxPQUFPaU0sTUFBTTtBQ1VsQyxRQUFNTSxxQkFBcUJBLENBQUM7QUFBQSxJQUNqQ0M7QUFBQUEsSUFDQUMsWUFBWTtBQUFBLElBQ1pDLGNBQWNmO0FBQUFBLEVBQ1AsTUFBTTtBQUNiLFVBQU0sQ0FBQ00sUUFBUVUsU0FBUyxJQUFJaE8sRUFBaUIsU0FBUztBQUVoRGlPLFVBQUFBLGNBQWNBLENBQUNQLFdBQXdCOztBQUMzQyxZQUFNUSxjQUFjUixPQUFPUyxzQkFBdUIsRUFBQ0MsU0FBUztBQUN0REMsWUFBQUEsb0JBQW9CekUsT0FBT0MsUUFBUTtBQUFBLFFBQUUsR0FBR2tFO0FBQUFBLE1BQWEsQ0FBQSxFQUFFTyxLQUFLLENBQUMsQ0FBQ0MsSUFBSUMsTUFBTSxHQUFHLENBQUNDLElBQUlDLE1BQU0sTUFBTUYsU0FBU0UsTUFBTTtBQUUzR0MsWUFBQUEsZUFDSE4sdUJBQWtCTyxLQUFLLENBQUMsQ0FBQ0wsSUFBSXhOLEtBQUssR0FBR2UsV0FBVTtBQUN4QyxjQUFBLENBQUMyTSxJQUFJSSxTQUFTLElBQUlSLGtCQUFrQnZNLFNBQVEsQ0FBQyxLQUFLO0FBRWpEb00sZUFBQUEsZUFBZW5OLFNBQVNtTixjQUFjVztBQUFBQSxNQUFBQSxDQUM5QyxNQUpBUixtQkFJSSxPQUFpQjtBQUV4QkwsZ0JBQVVXLFVBQVU7QUFBQSxJQUFBO0FBR3RCRyxNQUFnQixNQUFNO0FBQ3BCLFlBQU1DLGdCQUFnQmxCLFVBQVV4TixRQUFRMk8sUUFBUyxTQUFRbEIsWUFBWTtBQUVyRSxVQUFJaUIsZUFBZTtBQUNqQixjQUFNRSxpQkFBaUIsSUFBSUMsZUFBZSxNQUFNakIsWUFBWWMsYUFBYSxDQUFDO0FBQzFFRSx1QkFBZUUsUUFBUUosYUFBYTtBQUVwQ2Qsb0JBQVljLGFBQWE7QUFBQSxNQUMzQjtBQUFBLElBQ0YsR0FBRyxDQUFFLENBQUE7QUFFRXpCLFdBQUFBO0FBQUFBLEVBQ1Q7QUNoQkEsUUFBTThCLFNBQVNBLENBQUNyTyxPQUF3QnNPLFVBQXVCLEdBQUV0TyxRQUFRc087QUFFekUsUUFBTUMsT0FBT0EsQ0FBQ3ZGLFFBQWdCQSxJQUFJd0YsV0FBVyxLQUFLO0FBQ2xELFFBQU1DLFlBQVlBLENBQUN6RixRQUFnQkEsSUFBSXdGLFdBQVcsVUFBVTtBQUU1RCxRQUFNRSxhQUFhQSxDQUFDMUYsS0FBYWhKLFVBQTJCO0FBQzFELFFBQUkyTyxTQUFTM0Y7QUFDYixRQUFJNEYsV0FBVzVPO0FBRVh1TyxRQUFBQSxLQUFLSSxNQUFNLEdBQUc7QUFDUEEsZUFBQUEsT0FBTzVDLFFBQVEsT0FBTyxFQUFFO0FBQ3RCc0MsaUJBQUFBLE9BQU9yTyxPQUFPLElBQUk7QUFBQSxJQUMvQjtBQUNJeU8sUUFBQUEsVUFBVUUsTUFBTSxHQUFHO0FBQ1pBLGVBQUFBLE9BQU81QyxRQUFRLFlBQVksRUFBRTtBQUMzQnNDLGlCQUFBQSxPQUFPck8sT0FBTyxHQUFHO0FBQUEsSUFDOUI7QUFFTyxXQUFBO0FBQUEsTUFDTGdKLEtBQUsyRjtBQUFBQSxNQUNMM08sT0FBTzRPO0FBQUFBLElBQUFBO0FBQUFBLEVBRVg7QUFFQSxRQUFNQyxnQkFBZ0IsQ0FDcEIsZUFDQSxtQkFDQSxvQkFDQSxrQkFDQSxxQkFDQSxhQUNBLFlBQ0EsWUFDQSxhQUNBLFlBQ0EsVUFDQSxTQUNBLGlCQUNBLFlBQ0EsUUFDQSxTQUNBLE9BQ0EsVUFDQSxhQUNBLGdCQUNBLGNBQ0EsZUFDQSxjQUNBLGlCQUNBLGVBQ0EsY0FBYztBQUdIQyxRQUFBQSxhQUFhQSxDQUFDQyxPQUFrQkMsVUFBbUI7QUFDeERDLFVBQUFBLE9BQU9wRyxPQUFPb0csS0FBS0YsS0FBSztBQUU5QixRQUFJRSxLQUFLQyxTQUFTLFdBQVcsS0FBS0QsS0FBS0MsU0FBUyxXQUFXLEdBQUc7QUFDcERDLGNBQUFBLEtBQU0sNEVBQTJFSCxLQUFLO0FBQUEsSUFDaEc7QUFFSSxRQUFBLE9BQU9ELFVBQVUsVUFBVTtBQUN0QkEsYUFBQUE7QUFBQUEsSUFDVDtBQUVJLFFBQUEsZ0JBQWdCQSxTQUFTLHNCQUFzQkEsT0FBTztBQUN4RCxZQUFNSyxhQUFhTCxNQUFNSztBQUN6QixZQUFNQyxtQkFBbUJOLE1BQU1NO0FBRXZCLGNBQUE7QUFBQSxRQUNOLEdBQUdOO0FBQUFBLFFBQ0gsR0FBR0s7QUFBQUEsUUFDSCxpQkFBaUJDLGlCQUFpQkM7QUFBQUEsUUFDbEMsa0JBQWtCRCxpQkFBaUJFO0FBQUFBLFFBQ25DLG9CQUFvQkYsaUJBQWlCRztBQUFBQSxNQUFBQTtBQUFBQSxJQUV6QztBQUVPM0csV0FBQUEsT0FBT0MsUUFBUWlHLEtBQUssRUFBRXRGLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDK0YsU0FBU0MsU0FBUyxNQUFNO0FBQzdEYixVQUFBQSxjQUFjSyxTQUFTTyxPQUFPLEdBQUc7QUFDdkJwQixvQkFBQUEsT0FBT3FCLFdBQVcsSUFBSTtBQUFBLE1BQ3BDO0FBRU0sWUFBQTtBQUFBLFFBQUUxRztBQUFBQSxRQUFLaEo7QUFBQUEsTUFBQUEsSUFBVTBPLFdBQVdlLFNBQVNDLFNBQVM7QUFDcERoRyxVQUFJVixHQUFHLElBQUloSjtBQUVYLFVBQUlnSixRQUFRLGFBQWE7QUFDdkJVLFlBQUlpRyxZQUFZOUYsUUFBUTdKLEtBQUssSUFBSyxHQUFFQSxVQUFVO0FBQUEsTUFDaEQ7QUFFQSxVQUFJZ0osUUFBUSxhQUFhO0FBQ3ZCVSxZQUFJa0csWUFBWS9GLFFBQVE3SixLQUFLLElBQUssR0FBRUEsVUFBVTtBQUFBLE1BQ2hEO0FBRUEsVUFBSWdKLFFBQVEsWUFBWTtBQUNsQmpKLFlBQUFBLFdBQVcsT0FBT0MsVUFBVSxXQUFZNkosUUFBUTdKLEtBQUssSUFBSyxHQUFFQSxVQUFVLEtBQU1BO0FBQUFBLE1BQ2xGO0FBRUEsVUFBSWdKLFFBQVEsZUFBZUEsUUFBUSxlQUFlQSxRQUFRLFlBQVk7QUFDcEUsWUFBSSxPQUFPaEosVUFBVSxZQUFZQSxNQUFNMkssV0FBVyxHQUFHO0FBQ25EakIsY0FBSW1HLFVBQVU7QUFBQSxRQUFBLFdBQ0xsRyxhQUFhM0osS0FBSyxHQUFHO0FBQzlCMEosY0FBSW1HLFVBQVU7QUFBQSxRQUNoQjtBQUFBLE1BQ0Y7QUFFSTdHLFVBQUFBLElBQUlrRyxTQUFTLGFBQWEsR0FBRztBQUMvQnhGLFlBQUlvRyxjQUFjO0FBQUEsTUFDcEI7QUFFQSxVQUFJOUcsUUFBUSxVQUFVO0FBQ2hCK0csWUFBQUEsZUFBZTFCLE9BQU9yTyxPQUFPLElBQUk7QUFBQSxNQUN2QztBQUVBLFVBQUlnSixRQUFRLGlCQUFpQjtBQUMzQlUsWUFBSXNHLGlCQUFpQmhRO0FBQUFBLE1BQ3ZCO0FBRUEsVUFBSWdKLFFBQVEscUJBQXFCYSxRQUFRN0osS0FBSyxHQUFHO0FBQy9DMEosWUFBSXVHLGtCQUFtQixPQUFNalE7QUFDN0IwSixZQUFJd0csbUJBQW1CO0FBQUEsTUFDekI7QUFFSWxILFVBQUFBLFFBQVEsNEJBQTRCYSxRQUFRSCxJQUFJeUcsc0JBQXNCLEtBQUt0RyxRQUFRSCxJQUFJMEcsZUFBZSxHQUFHO0FBQ3JHdkUsY0FBQUEsTUFBTWpCLFNBQVNsQixJQUFJMEcsZUFBZTtBQUN4QyxZQUFJdkUsS0FBSztBQUNQbkMsY0FBSTBHLGtCQUFrQnhFLFVBQVcsT0FBTUMsSUFBSTFOLE1BQU0wTixJQUFJbE4sTUFBTWtOLElBQUlSLE1BQU0sQ0FBQzNCLElBQUl5Ryx5QkFBeUIsR0FBRztBQUFBLFFBQ3hHO0FBQUEsTUFDRjtBQUVBLFVBQUluSCxRQUFRLFVBQVU7QUFDaEJxSCxZQUFBQSxhQUFhclEsUUFBUSxTQUFTO0FBQUEsTUFDcEM7QUFFQSxVQUFJZ0osUUFBUSxZQUFZO0FBQ2xCc0gsWUFBQUEsWUFBWXRRLFFBQVEsV0FBVztBQUFBLE1BQ3JDO0FBRUEsVUFBSWdKLFFBQVEsYUFBYTtBQUNuQnVILFlBQUFBLGlCQUFpQnZRLFFBQVEsaUJBQWlCO0FBQUEsTUFDaEQ7QUFFTzBKLGFBQUFBO0FBQUFBLE9BQ05xRixLQUFLO0FBQUEsRUFDVjtBQzVLQSxRQUFNeUIsY0FBY0EsQ0FBQ0MsU0FBb0IsT0FBT0EsU0FBUyxZQUFZLENBQUNuSCxNQUFNNUQsUUFBUStLLElBQUksS0FBSyxZQUFZQTtBQUVsRyxRQUFNQyxnQkFBZ0JBLENBQUNwUSxVQUM1QnVJLE9BQU9DLFFBQVF4SSxLQUFLLEVBQUVtSixPQUFPLENBQUNDLEtBQUssQ0FBQ3NGLE9BQU95QixJQUFJLE1BQU07QUFDbkQvRyxRQUFJc0YsS0FBSyxJQUFJd0IsWUFBWUMsSUFBSSxJQUFJM0IsV0FBVztBQUFBLE1BQUUsR0FBR3hPLE1BQU0wTyxLQUFLO0FBQUEsSUFBQSxHQUFLQSxLQUFLLElBQUl5QjtBQUVuRS9HLFdBQUFBO0FBQUFBLEVBQ1QsR0FBRyxFQUFFO0FDSlAsUUFBTWlILGNBQXlCQSxDQUFDO0FBQUEsSUFBRTVRO0FBQUFBLElBQVUsR0FBRzZRO0FBQUFBLEVBQUssTUFBTTs7QUFDbERDLFVBQUFBLGVBQWM5USwwQ0FBVWdNLFFBQVEsVUFBVSxRQUE1QmhNLG1CQUFpQ2dNLFFBQVEsY0FBZTtBQUU1RSxXQUFPOUwsRUFBQSxPQUFBO0FBQUEsTUFBQSxHQUFTMlE7QUFBQUEsTUFBTUUseUJBQXlCO0FBQUEsUUFBRUMsUUFBUUY7QUFBQUEsTUFBWTtBQUFBLElBQUEsQ0FBSztBQUFBLEVBQzVFO0FDUk8sUUFBTUcsWUFBWUEsTUFBTTtBQUM3QixVQUFNLENBQUNqUyxRQUFRQyxTQUFTLElBQUlDLEVBQVMsS0FBSztBQUUxQyxXQUFPLENBQUNGLFFBQVEsTUFBTUMsVUFBVU8sQ0FBUSxTQUFBLENBQUNBLElBQUksQ0FBQztBQUFBLEVBQ2hEO0FDSkEsUUFBTTBSLFlBQWdCQSxNQUNwQmhSLEVBQUEsT0FBQTtBQUFBLElBQUtpUixPQUFNO0FBQUEsSUFBNkI3RCxPQUFNO0FBQUEsSUFBSzhELFFBQU87QUFBQSxJQUFLQyxTQUFRO0FBQUEsSUFBV3JSLFVBQ2hGRSxFQUFBLFFBQUE7QUFBQSxNQUNFb1IsR0FBRTtBQUFBLE1BQ0ZDLE1BQUs7QUFBQSxJQUFBLENBQWM7QUFBQSxFQUNiLENBRVg7QUNQRCxRQUFNQyxXQUFlQSxNQUNuQnRSLEVBQUEsT0FBQTtBQUFBLElBQUttUixTQUFRO0FBQUEsSUFBV3JSLFVBQ3RCRSxFQUFBLFFBQUE7QUFBQSxNQUNFcVIsTUFBSztBQUFBLE1BQ0xFLFVBQVM7QUFBQSxNQUNUSCxHQUFFO0FBQUEsSUFBQSxDQUErdEI7QUFBQSxFQUMzdEIsQ0FFWDtBQ0xELFFBQU1JLGdCQUFnQkEsQ0FBQ0MsZ0JBQStDO0FBQUEsSUFDcEVDLE1BQU8sR0FBRUQsV0FBV0M7QUFBQUEsSUFDcEJDLE9BQVEsR0FBRUYsV0FBV0U7QUFBQUEsSUFDckJDLFFBQVMsR0FBRUgsV0FBV0c7QUFBQUEsSUFDdEJDLFVBQVcsR0FBRUosV0FBV0k7QUFBQUEsRUFDMUI7QUFFYUMsUUFBQUEsZUFBZUEsQ0FBQ0MsYUFBc0JOLGVBQThDOztBQUN6Rk8sVUFBQUEsaUJBQWlCUixjQUFjQyxVQUFVO0FBQ3pDM0MsVUFBQUEsUUFBUTJCLGNBQWNzQixXQUFXO0FBQ2pDRSxVQUFBQSxXQUFVbkQsb0NBQU9vRCxTQUFQcEQsbUJBQWFtRDtBQUU3QixVQUFNRSxhQUFhO0FBQUEsTUFDakJDLE1BQU8sR0FBRSxJQUFFTCxnREFBYU0sY0FBYk4sbUJBQXdCSyxTQUFRLEtBQUssS0FBSztBQUFBLE1BQ3JEakMsa0JBQWlCckIsb0NBQU91RCxjQUFQdkQsbUJBQWtCcUI7QUFBQUEsTUFDbkNtQyxpQkFBZ0J4RCxvQ0FBT3VELGNBQVB2RCxtQkFBa0J5RDtBQUFBQSxNQUNsQ0MsaUJBQWdCMUQsb0NBQU91RCxjQUFQdkQsbUJBQWtCMkQ7QUFBQUEsTUFDbENDLGdCQUFnQjtBQUFBLE1BQ2hCQyxrQkFBaUI3RCxvQ0FBT3VELGNBQVB2RCxtQkFBa0J5RDtBQUFBQSxNQUNuQ0ssa0JBQWlCOUQsb0NBQU91RCxjQUFQdkQsbUJBQWtCMkQ7QUFBQUEsTUFDbkNJLGlCQUFpQjtBQUFBLElBQUE7QUFHbkIsVUFBTUMsWUFBWTtBQUFBLE1BQ2hCVixPQUFNdEQsb0NBQU91RCxjQUFQdkQsbUJBQWtCc0Q7QUFBQUEsSUFBQUE7QUFHMUIsVUFBTVcsbUJBQWlCakUsb0NBQU9vRCxTQUFQcEQsbUJBQWEyQyxlQUFjLENBQUEsR0FDL0NuSSxJQUFJLENBQUMwSixjQUE2QmhCLGVBQWVnQixTQUFTLENBQUMsRUFDM0QvSCxLQUFLLElBQUk7QUFFTmdJLFVBQUFBLG1CQUNKckosU0FBUWtGLG9DQUFPb0QsU0FBUHBELG1CQUFhb0UsYUFBYSxPQUFLcEUsb0NBQU9vRCxTQUFQcEQsbUJBQWEyQyxXQUFXeEMsU0FBUyxlQUNwRTtBQUFBLE1BQ0VrRSxZQUFhLDRCQUEwQnJFLFdBQU1vRCxTQUFOcEQsbUJBQVlxQix3QkFBdUJyQixvQ0FBT29ELFNBQVBwRCxtQkFBYW9FO0FBQUFBLE1BQ3ZGbkQsZ0JBQWdCO0FBQUEsUUFFbEI7QUFFTixVQUFNcUQsWUFBWTtBQUFBLE1BQ2hCLElBQUd0RSwrQkFBT29ELFNBQVEsQ0FBQztBQUFBLE1BQ25CYyxXQUFXRDtBQUFBQSxNQUNYLEdBQUdFO0FBQUFBLElBQUFBO0FBR0UsV0FBQTtBQUFBLE1BQ0xoQjtBQUFBQSxNQUNBRTtBQUFBQSxNQUNBVztBQUFBQSxNQUNBTTtBQUFBQSxJQUFBQTtBQUFBQSxFQUVKO0FDeERPLFFBQU1DLG9CQUFvQixDQUFDLG1CQUFtQiwwQkFBMEIsbUJBQW1CLGVBQWU7QUFFcEdDLFFBQUFBLGlCQUFpQixDQUM1QixhQUNBLGdCQUNBLGNBQ0EsZUFDQSxjQUNBLGlCQUNBLGVBQ0EsY0FBYztBQUlULFFBQU1DLGdCQUFnQkEsQ0FBQ0MsU0FBaUJDLFFBQVFDLElBQUssOEJBQTZCRixNQUFNO0FBQ3hGLFFBQU1HLFlBQVlBLENBQUNILFNBQWlCQyxRQUFRQyxJQUFLLDBCQUF5QkYsTUFBTTtBQ1hoRixRQUFNSSxhQUFhQSxDQUFDdlQsT0FBZ0J3VCxZQUFZLFdBQVc7QUFDaEUsVUFBTUMsY0FBYzVVO0FBQ2Q2VSxVQUFBQSxjQUFjMVQsTUFBTTBULGVBQWVSO0FBQ25DUyxVQUFBQSxpQkFBaUIzVCxNQUFNMlQsa0JBQWtCTDtBQUN6Q00sVUFBQUEsVUFBVXBLLEtBQUt4SixNQUFNd1QsU0FBUyxHQUFHLFVBQVUsV0FBVyxhQUFhLFlBQVk7QUFFckZ0VSxNQUFVLE1BQU07QUFDZCxVQUFJLENBQUM4TCxXQUFXeUksWUFBWXpVLFNBQVM0VSxPQUFPLEdBQUc7QUFDN0MsWUFBSUEsUUFBUUMsUUFBUTtBQUNsQkgsc0JBQVlFLFFBQVFDLE1BQU07QUFBQSxRQUM1QjtBQUNBLFlBQUlELFFBQVFDLFFBQVE7QUFDbEJGLHlCQUFlQyxRQUFRRSxTQUFTO0FBQUEsUUFDbEM7QUFBQSxNQUNGO0FBQ0FMLGtCQUFZelUsVUFBVTRVO0FBQUFBLElBQUFBLEdBQ3JCLENBQUNBLE9BQU8sQ0FBQztBQUVaLFdBQU8sTUFBTTtBQUNYLFVBQUlBLFFBQVFHLFNBQVM7QUFDbkJMLG9CQUFZRSxRQUFRRyxPQUFPO0FBQUEsTUFDN0I7QUFDQSxVQUFJSCxRQUFRSSxZQUFZO0FBQ3RCTCx1QkFBZUMsUUFBUUksVUFBVTtBQUFBLE1BQ25DO0FBQUEsSUFBQTtBQUFBLEVBRUo7QUMzQmFDLFFBQUFBLGtCQUFrQkEsQ0FBQ2pVLFVBQW1CO0FBQ2pELFVBQU1rVSxRQUFRLG9CQUFJQyxJQUFJLENBQUEsQ0FBRTtBQUVmblUsYUFBQUEsT0FBTyxDQUFDMEksS0FBS2hKLFVBQVU7QUFDOUIsVUFBSWdKLFFBQVEsY0FBYztBQUN4QndMLGNBQU1FLElBQUkxVSxLQUFLO0FBQUEsTUFDakI7QUFFT0EsYUFBQUE7QUFBQUEsSUFBQUEsQ0FDUjtBQUVLMlUsVUFBQUEsWUFBWUMsSUFBUSxNQUFNdEwsTUFBTXVMLEtBQUtMLE1BQU1qSixRQUFRLEVBQUVoQyxJQUFJdUwsQ0FBUyxVQUFBO0FBQUEsTUFDdEVDLEtBQUs7QUFBQSxNQUNMQyxNQUFPLDJDQUEwQ0Y7QUFBQUEsSUFBQUEsRUFDakQsR0FBRyxDQUFDTixLQUFLLENBQUM7QUFFWmhWLE1BQVUsTUFBTTtBQUNkbVYsZ0JBQVU1TCxRQUFTSixDQUFBQSxTQUFTTCxXQUFXSyxJQUFJLENBQUM7QUFBQSxJQUFBLEdBQzNDLENBQUNnTSxTQUFTLENBQUM7QUFBQSxFQUNoQjtBQ0hBLFFBQU1NLGFBQXdCQSxNQUFNOztBQUM1QkMsVUFBQUEsVUFBVS9WLElBQU8sSUFBSTtBQUMzQixVQUFNLENBQUNnVyxhQUFhQyxpQkFBaUIsSUFBSXBFLFVBQVc7QUFDcEQsVUFBTTFRLFFBQVFFO0FBQ2QsVUFBTStMLFNBQVNNLG1CQUFtQjtBQUFBLE1BQUVDLFdBQVdvSTtBQUFBQSxJQUFBQSxDQUFTO0FBQ2xEbEQsVUFBQUEsY0FBY3BGLFlBQVl0TSxPQUFPaU0sTUFBTTtBQUN2Q3dDLFVBQUFBLFFBQVEyQixjQUFjc0IsV0FBVztBQUNqQ3FELFVBQUFBLFVBQVV4QixXQUFXN0IsV0FBVztBQUNoQyxVQUFBO0FBQUEsTUFBRWpUO0FBQUFBLE1BQVFLO0FBQUFBLElBQWFQLElBQUFBLGFBQVltVCxnREFBYU0sY0FBYk4sbUJBQXdCbFQsS0FBSztBQUNoRSxVQUFBO0FBQUEsTUFBRW9UO0FBQUFBLE1BQVNtQjtBQUFBQSxNQUFXTjtBQUFBQSxNQUFXWDtBQUFBQSxJQUFBQSxJQUFlTCxhQUFhQyxhQUFhO0FBQUEsTUFDOUVMLE1BQU0yRCxTQUFPQztBQUFBQSxNQUNiM0QsT0FBTzBELFNBQU8xRDtBQUFBQSxNQUNkQyxRQUFReUQsU0FBT3pEO0FBQUFBLE1BQ2ZDLFVBQVV3RCxTQUFPeEQ7QUFBQUEsSUFBQUEsQ0FDbEI7QUFDRHlDLG9CQUFnQnZDLFdBQVc7QUFFM0IsV0FDRXdELEVBQUEsT0FBQTtBQUFBLE1BQUtDLFdBQVdILFNBQU94VDtBQUFBQSxNQUFNNFQsS0FBS1I7QUFBQUEsTUFBUW5WLFdBQ3hDRSxFQUFBLE9BQUE7QUFBQSxRQUFLd1YsV0FBV0gsU0FBT25EO0FBQUFBLFFBQU13RCxPQUFPdEM7QUFBQUEsUUFBV2dDLFNBQVNqVztBQUFBQSxRQUFTVyxVQUM5RG1TLFdBQ0NqUyxFQUFBLE9BQUE7QUFBQSxVQUFLd1YsV0FBV0gsU0FBT007QUFBQUEsVUFBVzdWLFVBQ2hDRSxFQUFDc1IsVUFBUSxFQUFBO0FBQUEsUUFBQSxDQUFHO0FBQUEsTUFBQSxDQUVmLEdBRUhpRSxFQUFBLE9BQUE7QUFBQSxRQUFLQyxXQUFXL1gsV0FBVzRYLFNBQU9PLE1BQU07QUFBQSxVQUFFLENBQUNQLFNBQU9RLFFBQVEsR0FBRy9XO0FBQUFBLFFBQUFBLENBQVE7QUFBQSxRQUFHNFcsT0FBTzVDO0FBQUFBLFFBQVVoVCxXQUN2RkUsRUFBQSxPQUFBO0FBQUEsVUFBS3dWLFdBQVdILFNBQU9TO0FBQUFBLFVBQU9KLE9BQU92RDtBQUFBQSxRQUFBQSxDQUFXLEdBQ2hEblMsRUFBQSxPQUFBO0FBQUEsVUFBS3dWLFdBQVdILFNBQU9VO0FBQUFBLFVBQU9MLE9BQU81RyxNQUFNaUg7QUFBQUEsVUFBT1gsU0FBU2pXO0FBQUFBLFVBQVNXLFVBQ2xFRSxFQUFDZ1IsV0FBUyxFQUFBO0FBQUEsUUFBQSxDQUFHLEdBRWZ1RSxFQUFBLE9BQUE7QUFBQSxVQUFLQyxXQUFXSCxTQUFPaEQ7QUFBQUEsVUFBV3FELE9BQU81RyxNQUFNdUQ7QUFBQUEsVUFBVXZTLFdBQ3ZEeVYsRUFBQSxLQUFBO0FBQUEsWUFBR1IsT0FBTWpHLFdBQU1qTixTQUFOaU4sbUJBQVlrSDtBQUFBQSxZQUFPNVYsUUFBTztBQUFBLFlBQVMwVSxLQUFJO0FBQUEsWUFBK0JNO0FBQUFBLFlBQWlCdFYsV0FDOUZ5VixFQUFBLE9BQUE7QUFBQSxjQUFLQyxXQUFXSCxTQUFPMVg7QUFBQUEsY0FBTW1DLFdBQzNCRSxFQUFBLE9BQUE7QUFBQSxnQkFBS3dWLFdBQVdILFNBQU9ZO0FBQUFBLGdCQUFNUCxPQUFPNUcsTUFBTW1IO0FBQUFBLGNBQUFBLENBQVksR0FDdERqVyxFQUFDMFEsYUFBVztBQUFBLGdCQUFDOEUsV0FBV0gsU0FBT2E7QUFBQUEsZ0JBQU1SLE9BQU81RyxNQUFNb0g7QUFBQUEsZ0JBQUtwVyxXQUNwRGdQLG9DQUFPb0gsU0FBUHBILG1CQUFhaFA7QUFBQUEsY0FBQUEsQ0FDRixDQUFBO0FBQUEsWUFBQSxDQUFBLEdBRWhCRSxFQUFBLE9BQUE7QUFBQSxjQUNFd1YsV0FBVy9YLFdBQVc0WCxTQUFPYyxRQUFRO0FBQUEsZ0JBQ25DLENBQUNkLFNBQU9lLGNBQWMsR0FBR3RILE1BQU1xSCxPQUFPRTtBQUFBQSxjQUFBQSxDQUN2QztBQUFBLGNBQ0RYLE9BQU81RyxNQUFNcUg7QUFBQUEsY0FBT3JXLFdBRW5CZ1AsV0FBTXFILFdBQU5ySCxtQkFBY2hQO0FBQUFBLFlBQUFBLENBQ1gsQ0FBQTtBQUFBLFVBQUEsQ0FBQSxHQUVSRSxFQUFBLE9BQUE7QUFBQSxZQUNFd1YsV0FBVy9YLFdBQVc0WCxTQUFPaUIsT0FBTztBQUFBLGNBQ2xDLENBQUNqQixTQUFPa0IsU0FBUyxHQUFHckI7QUFBQUEsWUFBQUEsQ0FDckI7QUFBQSxZQUNEUSxPQUFPNUcsTUFBTXdIO0FBQUFBLFlBQU14VyxVQUVuQnlWLEVBQUEsUUFBQTtBQUFBLGNBQU1DLFdBQVdILFNBQU9tQjtBQUFBQSxjQUFVMVcsV0FDaENFLEVBQUEsUUFBQTtBQUFBLGdCQUFBRixXQUFPZ1Asb0NBQU93SCxVQUFQeEgsbUJBQWNoUDtBQUFBQSxjQUFBQSxDQUFRLEdBQzdCRSxFQUFBLFFBQUE7QUFBQSxnQkFBTXdWLFdBQVdILFNBQU9vQjtBQUFBQSxnQkFBYXJCLFNBQVNEO0FBQUFBLGdCQUFrQnJWLFVBQzdEb1YsZUFBY3BHLG9DQUFPd0gsVUFBUHhILG1CQUFjNEgsa0JBQWlCNUgsb0NBQU93SCxVQUFQeEgsbUJBQWM2SDtBQUFBQSxjQUFBQSxDQUN2RCxDQUFBO0FBQUEsWUFBQSxDQUFBO0FBQUEsVUFBQSxDQUVMLENBQUE7QUFBQSxRQUFBLENBQ0YsQ0FBQTtBQUFBLE1BQUEsQ0FDRixDQUFBO0FBQUEsSUFBQSxDQUNGO0FBQUEsRUFFVjtBQUVlelcsUUFBQUEsVUFBQUEsT0FBT0YsRUFBQ2dWLGVBQWE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM5RXBDLFFBQU00QixjQUFnQkEsTUFBTTs7QUFDMUIsVUFBTXZXLFFBQVFFO0FBQ1J1TyxVQUFBQSxRQUFRMkIsY0FBY3BRLEtBQUs7QUFDM0IrVSxVQUFBQSxVQUFVeEIsV0FBV3ZULEtBQUs7QUFFaEMsV0FDRWtWLEVBQUEsS0FBQTtBQUFBLE1BQ0VSLE9BQU1qRyxXQUFNak4sU0FBTmlOLG1CQUFZa0g7QUFBQUEsTUFDbEI1VixRQUFPO0FBQUEsTUFDUDBVLEtBQUk7QUFBQSxNQUNKVSxXQUFXL1gsV0FBVzRYLFNBQU94VCxNQUFNO0FBQUEsUUFDakMsQ0FBQ3dULFNBQU93QixRQUFRLEtBQUcvSCxXQUFNak4sU0FBTmlOLG1CQUFZZ0ksYUFBWTtBQUFBLE1BQUEsQ0FDNUM7QUFBQSxNQUNEcEIsT0FBTzVHLE1BQU1qTjtBQUFBQSxNQUNidVQ7QUFBQUEsTUFBaUJ0VixXQUVqQnlWLEVBQUEsT0FBQTtBQUFBLFFBQUtDLFdBQVdILFNBQU9PO0FBQUFBLFFBQUs5VixXQUMxQkUsRUFBQSxPQUFBO0FBQUEsVUFBS3dWLFdBQVdILFNBQU8wQjtBQUFBQSxVQUFNckIsT0FBTzVHLE1BQU1pSTtBQUFBQSxRQUFBQSxDQUFLLEdBQy9DeEIsRUFBQSxPQUFBO0FBQUEsVUFBS0MsV0FBV0gsU0FBTzJCO0FBQUFBLFVBQVVsWCxXQUMvQkUsRUFBQSxPQUFBO0FBQUEsWUFBS3dWLFdBQVdILFNBQU9ZO0FBQUFBLFlBQU1QLE9BQU81RyxNQUFNbUg7QUFBQUEsVUFBQUEsQ0FBSyxHQUMvQ2pXLEVBQUEsT0FBQTtBQUFBLFlBQUt3VixXQUFXSCxTQUFPYTtBQUFBQSxZQUFNUixPQUFPNUcsTUFBTW9IO0FBQUFBLFlBQUtwVyxVQUM3Q0UsRUFBQzBRLGFBQVc7QUFBQSxjQUFBNVEsV0FBRWdQLFdBQU1vSCxTQUFOcEgsbUJBQVloUDtBQUFBQSxZQUFBQSxDQUFRO0FBQUEsVUFBQSxDQUM5QixDQUFBO0FBQUEsUUFBQSxDQUFBLEdBR1J5VixFQUFBLE9BQUE7QUFBQSxVQUFLQyxXQUFXSCxTQUFPYztBQUFBQSxVQUFRVCxPQUFPNUcsTUFBTXFIO0FBQUFBLFVBQU9yVyxXQUNqREUsRUFBQSxPQUFBO0FBQUEsWUFBS3dWLFdBQVdILFNBQU9ZO0FBQUFBLFlBQU1QLE9BQU81RyxNQUFNbUg7QUFBQUEsVUFBQUEsQ0FBSyxHQUMvQ2pXLEVBQUEsT0FBQTtBQUFBLFlBQUt3VixXQUFXSCxTQUFPNEI7QUFBQUEsWUFBV25YLFdBQUVnUCxXQUFNcUgsV0FBTnJILG1CQUFjaFA7QUFBQUEsVUFBQUEsQ0FBZSxDQUFBO0FBQUEsUUFBQSxDQUM3RCxDQUFBO0FBQUEsTUFBQSxDQUFBLEdBRVJFLEVBQUEsT0FBQTtBQUFBLFFBQUt3VixXQUFXSCxTQUFPaUI7QUFBQUEsUUFBT1osT0FBTzVHLE1BQU13SDtBQUFBQSxRQUFNeFcsV0FDOUNnUCxXQUFNd0gsVUFBTnhILG1CQUFhaFA7QUFBQUEsTUFBQUEsQ0FDVixDQUFBO0FBQUEsSUFBQSxDQUNKO0FBQUEsRUFFUjtBQ3pCQSxRQUFNb1gsY0FBY0EsTUFBTTs7QUFDbEJqQyxVQUFBQSxVQUFVL1YsSUFBTyxJQUFJO0FBQ3JCLFVBQUE7QUFBQSxNQUFFSjtBQUFBQSxNQUFRSztBQUFBQSxRQUFhUCxZQUFhO0FBQzFDLFVBQU15QixRQUFRRTtBQUNkLFVBQU0rTCxTQUFTTSxtQkFBbUI7QUFBQSxNQUFFQyxXQUFXb0k7QUFBQUEsSUFBQUEsQ0FBUztBQUNsRGxELFVBQUFBLGNBQWNwRixZQUFZdE0sT0FBT2lNLE1BQU07QUFDdkN3QyxVQUFBQSxRQUFRMkIsY0FBY3NCLFdBQVc7QUFDdkN1QyxvQkFBZ0J2QyxXQUFXO0FBQ3JCLFVBQUE7QUFBQSxNQUFFRTtBQUFBQSxNQUFTbUI7QUFBQUEsTUFBV047QUFBQUEsTUFBV1g7QUFBQUEsSUFBQUEsSUFBZUwsYUFBYUMsYUFBYTtBQUFBLE1BQzlFTCxNQUFNMkQsU0FBT0M7QUFBQUEsTUFDYjNELE9BQU8wRCxTQUFPMUQ7QUFBQUEsTUFDZEMsUUFBUXlELFNBQU96RDtBQUFBQSxNQUNmQyxVQUFVd0QsU0FBT3hEO0FBQUFBLElBQUFBLENBQ2xCO0FBQ0tzRixVQUFBQSxnQkFBZXJJLG9DQUFPc0ksVUFBUHRJLG1CQUFjbUQ7QUFFbkMsV0FDRXNELEVBQUEsT0FBQTtBQUFBLE1BQUtFLEtBQUtSO0FBQUFBLE1BQVNPLFdBQVdILFNBQU94VDtBQUFBQSxNQUFLL0IsV0FDeENFLEVBQUEsT0FBQTtBQUFBLFFBQUt3VixXQUFXSCxTQUFPbkQ7QUFBQUEsUUFBTXdELE9BQU90QztBQUFBQSxRQUFXZ0MsU0FBU2pXO0FBQUFBLFFBQVNXLFVBQzlEbVMsV0FDQ2pTLEVBQUEsT0FBQTtBQUFBLFVBQUt3VixXQUFXSCxTQUFPTTtBQUFBQSxVQUFXN1YsVUFDaENFLEVBQUNzUixVQUFRLEVBQUE7QUFBQSxRQUFBLENBQUc7QUFBQSxNQUFBLENBRWYsR0FFSGlFLEVBQUEsT0FBQTtBQUFBLFFBQ0VDLFdBQVcvWCxXQUFXNFgsU0FBT08sTUFBTTtBQUFBLFVBQ2pDLENBQUNQLFNBQU9RLFFBQVEsR0FBRy9XO0FBQUFBLFFBQUFBLENBQ3BCO0FBQUEsUUFDRDRXLE9BQU81QztBQUFBQSxRQUFVaFQsV0FFakJFLEVBQUEsT0FBQTtBQUFBLFVBQUt3VixXQUFXSCxTQUFPUztBQUFBQSxVQUFPSixPQUFPdkQ7QUFBQUEsUUFBQUEsQ0FBVyxHQUNoRG9ELEVBQUEsT0FBQTtBQUFBLFVBQUtDLFdBQVdILFNBQU9oRDtBQUFBQSxVQUFXcUQsT0FBTzVHLE1BQU11RDtBQUFBQSxVQUFVdlMsV0FDdkRFLEVBQUEsT0FBQTtBQUFBLFlBQUt3VixXQUFXSCxTQUFPVTtBQUFBQSxZQUFPTCxPQUFPNUcsTUFBTWlIO0FBQUFBLFlBQU9YLFNBQVNqVztBQUFBQSxZQUFTVyxVQUNsRUUsRUFBQ2dSLFdBQVMsRUFBQTtBQUFBLFVBQUEsQ0FBRyxHQUVmaFIsRUFBQSxPQUFBO0FBQUEsWUFBS3dWLFdBQVdILFNBQU9nQztBQUFBQSxZQUFXM0IsT0FBTzVHLE1BQU11STtBQUFBQSxZQUFVdlgsV0FDdERnUCxXQUFNdUksY0FBTnZJLG1CQUFpQmhQO0FBQUFBLFVBQUFBLENBQVEsR0FFNUJ5VixFQUFBLE9BQUE7QUFBQSxZQUFLQyxXQUFXSCxTQUFPOU07QUFBQUEsWUFBS3pJLFVBQUEsQ0FDekJxWCxnQkFDQ25YLEVBQUEsT0FBQTtBQUFBLGNBQUt3VixXQUFXSCxTQUFPaUM7QUFBQUEsY0FBVTVCLE9BQU83TCxLQUFLaUYsTUFBTXNJLE9BQU8sT0FBTztBQUFBLGNBQUV0WCxVQUNqRUUsRUFBQ3NSLFVBQVEsRUFBQTtBQUFBLFlBQUEsQ0FBRyxHQUdoQnRSLEVBQUEsT0FBQTtBQUFBLGNBQUt3VixXQUFXSCxTQUFPa0M7QUFBQUEsY0FBVzdCLE9BQU81RyxNQUFNc0k7QUFBQUEsY0FBTXRYLFdBQUVnUCxXQUFNc0ksVUFBTnRJLG1CQUFhaFA7QUFBQUEsWUFBQUEsQ0FBZSxDQUFBO0FBQUEsVUFBQSxDQUFBLEdBR3JGRSxFQUFBLE9BQUE7QUFBQSxZQUFLd1YsV0FBV0gsU0FBTzFYO0FBQUFBLFlBQU1tQyxXQUN6QmdQLE1BQU1oUCxZQUFZLENBQUEsR0FBSXdKLElBQUlrTyxDQUFBQSxVQUMxQnhYLEVBQUNILGNBQVk7QUFBQSxjQUFDRSxPQUFPeVg7QUFBQUEsY0FBTTFYLFVBQ3pCRSxFQUFDNFcsYUFBUyxFQUFBO0FBQUEsWUFBQSxDQUViLENBQUE7QUFBQSxVQUFBLENBQ0csQ0FBQTtBQUFBLFFBQUEsQ0FDRixDQUFBO0FBQUEsTUFBQSxDQUNGLENBQUE7QUFBQSxJQUFBLENBQ0Y7QUFBQSxFQUVWO0FBRWUxVyxRQUFBQSxVQUFBQSxPQUFPRixFQUFDa1gsZ0JBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQy9FeEJPLFFBQUFBLHdCQUF3QkEsQ0FBQ0MsY0FDcENBLFlBQVk7QUFBQSxJQUFFdEYsTUFBTTtBQUFBLElBQWN1RixRQUFRO0FBQUEsSUFBVUMsT0FBTztBQUFBLEVBQVcsRUFBRUYsU0FBUyxJQUFJQTs7Ozs7QUNLdkYsUUFBTUcsT0FBV0EsTUFBTTs7QUFDckIsVUFBTXhYLFFBQVFFO0FBQ1J1TyxVQUFBQSxRQUFRMkIsY0FBY3BRLEtBQUs7QUFFakMsV0FDRUwsRUFBQSxPQUFBO0FBQUEsTUFBS3dWLFdBQVdILFNBQU94VDtBQUFBQSxNQUFNNlQsT0FBTzVHLE1BQU1qTjtBQUFBQSxNQUFLL0IsVUFDN0NFLEVBQUMwUSxhQUFXO0FBQUEsUUFBQTVRLFdBQUVnUCxvQ0FBT2pOLFNBQVBpTixtQkFBYWhQO0FBQUFBLE1BQUFBLENBQVE7QUFBQSxJQUFBLENBQy9CO0FBQUEsRUFFVjtBQ0FBLFFBQU1nWSxnQkFBa0JBLE1BQU07O0FBQ3RCN0MsVUFBQUEsVUFBVS9WLElBQU8sSUFBSTtBQUMzQixVQUFNb04sU0FBU00sbUJBQW1CO0FBQUEsTUFBRUMsV0FBV29JO0FBQUFBLElBQUFBLENBQVM7QUFDeEQsVUFBTTVVLFFBQVFFO0FBQ1J3UixVQUFBQSxjQUFjcEYsWUFBWXRNLE9BQU9pTSxNQUFNO0FBQ3ZDOEksVUFBQUEsVUFBVXhCLFdBQVc3QixXQUFXO0FBRXRDdEgsUUFBSXNILGFBQWEseUJBQXdCQSxnREFBYW9FLFdBQWJwRSxtQkFBcUIzRSxLQUFLO0FBQ25FM0MsUUFBSXNILGFBQWEsd0JBQXVCQSxnREFBYXVFLFVBQWJ2RSxtQkFBb0IzRSxLQUFLO0FBQzNEMEIsVUFBQUEsUUFBUTJCLGNBQWNzQixXQUFXO0FBR3ZDLFVBQU1lLFlBQVk7QUFBQSxNQUNoQmlGLFlBQVlOLHVCQUFzQjNJLFdBQU1qTixTQUFOaU4sbUJBQVlrSixLQUFLO0FBQUEsSUFBQTtBQUdyRCxVQUFNQyxjQUFjO0FBQUEsTUFDbEIsR0FBR25KLCtCQUFPcUg7QUFBQUEsTUFDVitCLGdCQUFnQlQsdUJBQXNCM0ksV0FBTWpOLFNBQU5pTixtQkFBWTRJLFNBQVM7QUFBQSxJQUFBO0FBRzdELFVBQU1TLGFBQWE7QUFBQSxNQUNqQixHQUFHckosK0JBQU93SDtBQUFBQSxNQUNWNEIsZ0JBQWdCVCx1QkFBc0IzSSxXQUFNak4sU0FBTmlOLG1CQUFZNEksU0FBUztBQUFBLElBQUE7QUFHN0QsV0FDRTFYLEVBQUEsS0FBQTtBQUFBLE1BQ0V5VixLQUFLUjtBQUFBQSxNQUNMRixPQUFNakcsV0FBTWpOLFNBQU5pTixtQkFBWWtIO0FBQUFBLE1BQ2xCNVYsUUFBTztBQUFBLE1BQ1AwVSxLQUFJO0FBQUEsTUFDSlUsV0FBVy9YLFdBQVc0WCxTQUFPeFQsTUFBTTtBQUFBLFFBQ2pDLENBQUN3VCxTQUFPakosT0FBTyxHQUFHRSxXQUFXO0FBQUEsUUFDN0IsQ0FBQytJLFNBQU9uSixNQUFNLEdBQUdJLFdBQVc7QUFBQSxRQUM1QixDQUFDK0ksU0FBT2xKLE1BQU0sR0FBR0csV0FBVztBQUFBLE1BQUEsQ0FDN0I7QUFBQSxNQUNEb0osT0FBTzVHLE1BQU1qTjtBQUFBQSxNQUNidVQ7QUFBQUEsTUFBaUJ0VixVQUVqQnlWLEVBQUEsT0FBQTtBQUFBLFFBQUtDLFdBQVdILFNBQU9PO0FBQUFBLFFBQU1GLE9BQU81QztBQUFBQSxRQUFVaFQsV0FDNUNFLEVBQUEsT0FBQTtBQUFBLFVBQUt3VixXQUFXSCxTQUFPWTtBQUFBQSxVQUFNUCxPQUFPNUcsTUFBTW1IO0FBQUFBLFFBQUFBLENBQUssR0FDL0NqVyxFQUFBLE9BQUE7QUFBQSxVQUFLd1YsV0FBV0gsU0FBT2E7QUFBQUEsVUFBS3BXLFlBQ3hCZ1AsK0JBQU9oUCxhQUFZLENBQUEsR0FBSXdKLElBQUlDLENBQUFBLE9BQzNCdkosRUFBQ0gsY0FBWTtBQUFBLFlBQUNFLE9BQU93SjtBQUFBQSxZQUFHekosVUFDdEJFLEVBQUM2WCxNQUFJLEVBQUE7QUFBQSxVQUFBLENBRVIsQ0FBQTtBQUFBLFFBQUEsQ0FBQyxHQUVKN1gsRUFBQSxPQUFBO0FBQUEsVUFBS3dWLFdBQVdILFNBQU9jO0FBQUFBLFVBQVFULE9BQU91QztBQUFBQSxVQUFZblksVUFDL0NtWSwyQ0FBYW5ZO0FBQUFBLFFBQUFBLENBQVEsR0FFeEJFLEVBQUEsT0FBQTtBQUFBLFVBQUt3VixXQUFXSCxTQUFPaUI7QUFBQUEsVUFBT1osT0FBT3lDO0FBQUFBLFVBQVdyWSxVQUM3Q3FZLHlDQUFZclk7QUFBQUEsUUFBQUEsQ0FDVCxDQUFBO0FBQUEsTUFBQSxDQUFBO0FBQUEsSUFBQSxDQUVOO0FBQUEsRUFFUjtBQUVlSSxRQUFBQSxVQUFBQSxPQUFPRixFQUFDOFgsa0JBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNqRXJDLFFBQU1NLFVBQVlBLE1BQU07O0FBQ3RCLFVBQU0vWCxRQUFRRTtBQUNSdU8sVUFBQUEsUUFBUTJCLGNBQWNwUSxLQUFLO0FBQzNCaU0sVUFBQUEsVUFBU2pNLCtCQUFPaU0sV0FBVTtBQUMxQjhJLFVBQUFBLFVBQVV4QixXQUFXdlQsS0FBSztBQUdoQyxXQUNFa1YsRUFBQSxLQUFBO0FBQUEsTUFDRVIsT0FBTWpHLFdBQU1qTixTQUFOaU4sbUJBQVlrSDtBQUFBQSxNQUNsQjVWLFFBQU87QUFBQSxNQUNQMFUsS0FBSTtBQUFBLE1BQ0pVLFdBQVcvWCxXQUFXNFgsU0FBT3hULE1BQU07QUFBQSxRQUNqQyxDQUFDd1QsU0FBT2pKLE9BQU8sR0FBR0UsV0FBVztBQUFBLE1BQUEsQ0FDOUI7QUFBQSxNQUNEb0osT0FBT3hMLEtBQUs0RSxNQUFNak4sTUFBTSxHQUFHeVIsY0FBYztBQUFBLE1BQ3pDOEI7QUFBQUEsTUFBaUJ0VixXQUVqQkUsRUFBQSxPQUFBO0FBQUEsUUFBS3dWLFdBQVdILFNBQU9nRDtBQUFBQSxRQUFRM0MsT0FBTzVHLE1BQU11SjtBQUFBQSxRQUFPdlksVUFDakRFLEVBQUEsT0FBQTtBQUFBLFVBQUt3VixXQUFXSCxTQUFPWTtBQUFBQSxVQUFNUCxPQUFPNUcsTUFBTW1IO0FBQUFBLFFBQUFBLENBQUs7QUFBQSxNQUFBLENBQUcsR0FFcERWLEVBQUEsT0FBQTtBQUFBLFFBQUtDLFdBQVdILFNBQU9oRDtBQUFBQSxRQUFXcUQsT0FBTzdMLEtBQUtpRixNQUFNak4sTUFBTSxHQUFHeVIsY0FBYztBQUFBLFFBQUV4VCxXQUMzRXlWLEVBQUEsT0FBQTtBQUFBLFVBQUtDLFdBQVdILFNBQU9PO0FBQUFBLFVBQUs5VixXQUMxQkUsRUFBQSxPQUFBO0FBQUEsWUFBS3dWLFdBQVdILFNBQU9ZO0FBQUFBLFVBQUFBLENBQVksR0FDbkNqVyxFQUFDMFEsYUFBVztBQUFBLFlBQUM4RSxXQUFXSCxTQUFPYTtBQUFBQSxZQUFNUixPQUFPNUcsTUFBTW9IO0FBQUFBLFlBQUtwVyxXQUNwRGdQLFdBQU1vSCxTQUFOcEgsbUJBQVloUDtBQUFBQSxVQUFBQSxDQUNELENBQUE7QUFBQSxRQUFBLENBQUEsR0FFaEJ5VixFQUFBLE9BQUE7QUFBQSxVQUFBelYsV0FDRUUsRUFBQSxPQUFBO0FBQUEsWUFBS3dWLFdBQVdILFNBQU9jO0FBQUFBLFlBQVFULE9BQU81RyxNQUFNcUg7QUFBQUEsWUFBT3JXLFdBQ2hEZ1AsV0FBTXFILFdBQU5ySCxtQkFBY2hQO0FBQUFBLFVBQUFBLENBQVEsR0FFekJFLEVBQUEsT0FBQTtBQUFBLFlBQUt3VixXQUFXSCxTQUFPaUI7QUFBQUEsWUFBT1osT0FBTzVHLE1BQU13SDtBQUFBQSxZQUFNeFcsV0FDOUNnUCxXQUFNd0gsVUFBTnhILG1CQUFhaFA7QUFBQUEsVUFBQUEsQ0FDVixDQUFBO0FBQUEsUUFBQSxDQUNGLENBQUE7QUFBQSxNQUFBLENBQ0YsQ0FBQTtBQUFBLElBQUEsQ0FDSjtBQUFBLEVBRVI7QUNwQ0EsUUFBTWdZLGdCQUFrQkEsTUFBTTs7QUFDdEI3QyxVQUFBQSxVQUFVL1YsSUFBTyxJQUFJO0FBQzNCLFVBQU1vTixTQUFTTSxtQkFBbUI7QUFBQSxNQUFFQyxXQUFXb0k7QUFBQUEsSUFBQUEsQ0FBUztBQUN4RCxVQUFNNVUsUUFBUUU7QUFDUndSLFVBQUFBLGNBQWNwRixZQUFZdE0sT0FBT2lNLE1BQU07QUFDdkN3QyxVQUFBQSxRQUFRMkIsY0FBY3NCLFdBQVc7QUFDdkN1QyxvQkFBZ0J2QyxXQUFXO0FBRTNCLFdBQ0V3RCxFQUFBLE9BQUE7QUFBQSxNQUNFRSxLQUFLUjtBQUFBQSxNQUNMTyxXQUFXL1gsV0FBVzRYLFNBQU94VCxNQUFNO0FBQUEsUUFDakMsQ0FBQ3dULFNBQU9qSixPQUFPLEdBQUdFLFdBQVc7QUFBQSxNQUFBLENBQzlCO0FBQUEsTUFDRG9KLE9BQU81RyxNQUFNak47QUFBQUEsTUFBSy9CLFdBRWxCRSxFQUFBLE9BQUE7QUFBQSxRQUFLd1YsV0FBV0gsU0FBTytCO0FBQUFBLFFBQU8xQixPQUFPNUcsTUFBTXNJO0FBQUFBLFFBQU10WCxXQUM5Q2dQLFdBQU1zSSxVQUFOdEksbUJBQWFoUDtBQUFBQSxNQUFBQSxDQUFRLEdBRXhCRSxFQUFBLE9BQUE7QUFBQSxRQUFLd1YsV0FBV0gsU0FBT2lEO0FBQUFBLFFBQVF4WSxXQUMzQmdQLE1BQU1oUCxZQUFZLENBQUEsR0FBSXdKLElBQUlrTyxDQUFBQSxVQUMxQnhYLEVBQUNILGNBQVk7QUFBQSxVQUFDRSxPQUFPO0FBQUEsWUFBRSxHQUFHeVg7QUFBQUEsWUFBT2xMO0FBQUFBLFVBQU87QUFBQSxVQUFFeE0sVUFDeENFLEVBQUNvWSxTQUFLLEVBQUE7QUFBQSxRQUFBLENBRVQsQ0FBQTtBQUFBLE1BQUEsQ0FDRyxDQUFBO0FBQUEsSUFBQSxDQUNGO0FBQUEsRUFFVjtBQUVlbFksUUFBQUEsVUFBQUEsT0FBT0YsRUFBQzhYLGtCQUFjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcENyQyxRQUFNUyxRQUFZQSxNQUFNOztBQUN0QixVQUFNbFksUUFBUUU7QUFDUnVPLFVBQUFBLFFBQVEyQixjQUFjcFEsS0FBSztBQUMzQmlNLFVBQUFBLFVBQVNqTSwrQkFBT2lNLFdBQVU7QUFFaEMsV0FDRWlKLEVBQUEsT0FBQTtBQUFBLE1BQUtDLFdBQVcvWCxXQUFXNFgsU0FBT3hULE1BQU07QUFBQSxRQUN0QyxDQUFDd1QsU0FBT2pKLE9BQU8sR0FBR0UsV0FBVztBQUFBLE1BQUEsQ0FDOUI7QUFBQSxNQUFFeE0sV0FDRHlWLEVBQUEsT0FBQTtBQUFBLFFBQUtDLFdBQVdILFNBQU9qRDtBQUFBQSxRQUFLdFMsV0FDMUJ5VixFQUFBLE9BQUE7QUFBQSxVQUFLQyxXQUFXSCxTQUFPbUQ7QUFBQUEsVUFBTTFZLFdBQzNCRSxFQUFBLE9BQUE7QUFBQSxZQUFLd1YsV0FBV0gsU0FBT1k7QUFBQUEsVUFBQUEsQ0FBSyxHQUM1QmpXLEVBQUEsT0FBQTtBQUFBLFlBQUt3VixXQUFXSCxTQUFPWTtBQUFBQSxVQUFBQSxDQUFRLENBQUE7QUFBQSxRQUFBLENBQUEsR0FFakNWLEVBQUEsT0FBQTtBQUFBLFVBQUtDLFdBQVdILFNBQU9PO0FBQUFBLFVBQUs5VixXQUMxQkUsRUFBQSxPQUFBO0FBQUEsWUFBS3dWLFdBQVdILFNBQU9vRDtBQUFBQSxZQUFRL0MsT0FBTzVHLE1BQU0ySjtBQUFBQSxZQUFPM1ksV0FBRWdQLFdBQU0ySixXQUFOM0osbUJBQWNoUDtBQUFBQSxVQUFBQSxDQUFRLEdBQzNFeVYsRUFBQSxPQUFBO0FBQUEsWUFBS0MsV0FBV0gsU0FBT3FEO0FBQUFBLFlBQU1oRCxPQUFPNUcsTUFBTTBKO0FBQUFBLFlBQU0xWSxVQUFBLEVBQUVnUCxXQUFNMEosVUFBTjFKLG1CQUFhNkosT0FBSyxRQUFLN0osV0FBTTBKLFVBQU4xSixtQkFBYThKLEtBQUs7QUFBQSxVQUFBLENBQU8sQ0FBQTtBQUFBLFFBQUEsQ0FDOUYsQ0FBQTtBQUFBLE1BQUEsQ0FBQSxHQUVSckQsRUFBQSxPQUFBO0FBQUEsUUFBS0MsV0FBV0gsU0FBT3VDO0FBQUFBLFFBQU05WCxXQUMzQnlWLEVBQUEsT0FBQTtBQUFBLFVBQUtDLFdBQVdILFNBQU93RDtBQUFBQSxVQUFLL1ksV0FDMUJFLEVBQUEsT0FBQTtBQUFBLFlBQUt3VixXQUFXSCxTQUFPeUQ7QUFBQUEsVUFBQUEsQ0FBUyxHQUNoQzlZLEVBQUEsT0FBQTtBQUFBLFlBQUt3VixXQUFXSCxTQUFPMEQ7QUFBQUEsWUFBVXJELE9BQU81RyxNQUFNMEo7QUFBQUEsWUFBTTFZLFdBQUVnUCxXQUFNMEosVUFBTjFKLG1CQUFhNko7QUFBQUEsVUFBQUEsQ0FBWSxDQUFBO0FBQUEsUUFBQSxDQUFBLEdBR2pGcEQsRUFBQSxPQUFBO0FBQUEsVUFBS0MsV0FBV0gsU0FBTzJEO0FBQUFBLFVBQUlsWixXQUN6QkUsRUFBQSxPQUFBO0FBQUEsWUFBS3dWLFdBQVdILFNBQU80RDtBQUFBQSxZQUFVdkQsT0FBTzVHLE1BQU1tSztBQUFBQSxZQUFTblosV0FBRWdQLFdBQU1tSyxhQUFObkssbUJBQWdCaFA7QUFBQUEsVUFBQUEsQ0FBUSxHQUNqRkUsRUFBQSxPQUFBO0FBQUEsWUFBS3dWLFdBQVdILFNBQU82RDtBQUFBQSxZQUFVeEQsT0FBTzVHLE1BQU1vSztBQUFBQSxZQUFTcFosV0FBRWdQLFdBQU1vSyxhQUFOcEssbUJBQWdCaFA7QUFBQUEsVUFBQUEsQ0FBZSxDQUFBO0FBQUEsUUFBQSxDQUFBLEdBRzFGeVYsRUFBQSxPQUFBO0FBQUEsVUFBS0MsV0FBV0gsU0FBT3dEO0FBQUFBLFVBQUsvWSxXQUMxQkUsRUFBQSxPQUFBO0FBQUEsWUFBS3dWLFdBQVdILFNBQU95RDtBQUFBQSxVQUFBQSxDQUFTLEdBQ2hDOVksRUFBQSxPQUFBO0FBQUEsWUFBS3dWLFdBQVdILFNBQU8wRDtBQUFBQSxZQUFVckQsT0FBTzVHLE1BQU0wSjtBQUFBQSxZQUFNMVksV0FBRWdQLFdBQU0wSixVQUFOMUosbUJBQWE4SjtBQUFBQSxVQUFBQSxDQUFZLENBQUE7QUFBQSxRQUFBLENBQzNFLENBQUE7QUFBQSxNQUFBLENBQ0YsQ0FBQTtBQUFBLElBQUEsQ0FDRjtBQUFBLEVBRVY7QUM1QkEsUUFBTWQsY0FBa0JBLE1BQU07O0FBQ3RCN0MsVUFBQUEsVUFBVS9WLElBQU8sSUFBSTtBQUMzQixVQUFNb04sU0FBU00sbUJBQW1CO0FBQUEsTUFBRUMsV0FBV29JO0FBQUFBLElBQUFBLENBQVM7QUFDeEQsVUFBTTVVLFFBQVFFO0FBQ1J3UixVQUFBQSxjQUFjcEYsWUFBWXRNLE9BQU9pTSxNQUFNO0FBQzdDN0IsUUFBSXNILGFBQWEsZ0NBQStCQSxnREFBYW9ILGtCQUFicEgsbUJBQTRCM0UsS0FBSztBQUNqRjNDLFFBQUlzSCxhQUFhLHdCQUF1QkEsZ0RBQWF1RSxVQUFidkUsbUJBQW9CM0UsS0FBSztBQUMzRDBCLFVBQUFBLFFBQVEyQixjQUFjc0IsV0FBVztBQUNqQ3FELFVBQUFBLFVBQVV4QixXQUFXN0IsV0FBVztBQUV0QyxVQUFNZSxZQUFZO0FBQUEsTUFDaEIsR0FBR2hFLE1BQU1qTjtBQUFBQSxNQUNUa1csWUFBWU4sdUJBQXNCM0ksV0FBTWpOLFNBQU5pTixtQkFBWWtKLEtBQUs7QUFBQSxJQUFBO0FBR3JELFVBQU1vQixlQUFlO0FBQUEsTUFDbkIsR0FBR3RLLE1BQU11SztBQUFBQSxNQUNUdEIsWUFBWU4sdUJBQXNCM0ksV0FBTWpOLFNBQU5pTixtQkFBWWtKLEtBQUs7QUFBQSxJQUFBO0FBR3JELFVBQU1zQixZQUFZO0FBQUEsTUFDaEIsR0FBR3hLLE1BQU1vSDtBQUFBQSxNQUNUd0IsWUFBVzVJLFdBQU1qTixTQUFOaU4sbUJBQVlrSjtBQUFBQSxJQUFBQTtBQUd6QixVQUFNQyxjQUFjO0FBQUEsTUFDbEIsR0FBR25KLCtCQUFPcUg7QUFBQUEsTUFDVitCLGdCQUFnQlQsdUJBQXNCM0ksV0FBTWpOLFNBQU5pTixtQkFBWTRJLFNBQVM7QUFBQSxJQUFBO0FBRzdELFVBQU1TLGFBQWE7QUFBQSxNQUNqQixHQUFHckosK0JBQU93SDtBQUFBQSxNQUNWNEIsZ0JBQWdCVCx1QkFBc0IzSSxXQUFNak4sU0FBTmlOLG1CQUFZNEksU0FBUztBQUFBLElBQUE7QUFHN0QsV0FDRTFYLEVBQUEsS0FBQTtBQUFBLE1BQ0V5VixLQUFLUjtBQUFBQSxNQUNMRixPQUFNakcsV0FBTWpOLFNBQU5pTixtQkFBWWtIO0FBQUFBLE1BQ2xCNVYsUUFBTztBQUFBLE1BQ1AwVSxLQUFJO0FBQUEsTUFDSlUsV0FBVy9YLFdBQVc0WCxTQUFPeFQsTUFBTTtBQUFBLFFBQ2pDLENBQUN3VCxTQUFPakosT0FBTyxHQUFHRSxXQUFXO0FBQUEsUUFDN0IsQ0FBQytJLFNBQU9sSixNQUFNLEdBQUdHLFdBQVc7QUFBQSxRQUM1QixDQUFDK0ksU0FBT25KLE1BQU0sR0FBR0ksV0FBVztBQUFBLE1BQUEsQ0FDN0I7QUFBQSxNQUNEOEk7QUFBQUEsTUFBaUJ0VixVQUVqQnlWLEVBQUEsT0FBQTtBQUFBLFFBQUtDLFdBQVdILFNBQU9PO0FBQUFBLFFBQU1GLE9BQU81QztBQUFBQSxRQUFVaFQsV0FDNUN5VixFQUFBLE9BQUE7QUFBQSxVQUFLQyxXQUFXSCxTQUFPOU07QUFBQUEsVUFBS3pJLFdBQzFCRSxFQUFBLE9BQUE7QUFBQSxZQUFLd1YsV0FBV0gsU0FBTytCO0FBQUFBLFlBQU8xQixPQUFPNUcsTUFBTXNJO0FBQUFBLFlBQU10WCxXQUM5Q2dQLFdBQU1zSSxVQUFOdEksbUJBQWFoUDtBQUFBQSxVQUFBQSxDQUFRLEdBRXhCRSxFQUFBLE9BQUE7QUFBQSxZQUFLd1YsV0FBV0gsU0FBT1k7QUFBQUEsWUFBTVAsT0FBTzVHLE1BQU1tSDtBQUFBQSxVQUFBQSxDQUFRLENBQUE7QUFBQSxRQUFBLENBQUEsR0FFcERqVyxFQUFBLE9BQUE7QUFBQSxVQUFLd1YsV0FBV0gsU0FBT2lEO0FBQUFBLFVBQVM1QyxPQUFPMEQ7QUFBQUEsVUFBYXRaLFdBQ2hEZ1AsTUFBTWhQLFlBQVksQ0FBQSxHQUFJd0osSUFBSWtPLENBQUFBLFVBQzFCeFgsRUFBQ0gsY0FBWTtBQUFBLFlBQUNFLE9BQU87QUFBQSxjQUFFLEdBQUd5WDtBQUFBQSxjQUFPbEw7QUFBQUEsWUFBTztBQUFBLFlBQUV4TSxVQUN4Q0UsRUFBQ3VZLE9BQUssRUFBQTtBQUFBLFVBQUEsQ0FFVCxDQUFBO0FBQUEsUUFBQSxDQUNHLEdBRU52WSxFQUFDMFEsYUFBVztBQUFBLFVBQUM4RSxXQUFXSCxTQUFPYTtBQUFBQSxVQUFNUixPQUFPNEQ7QUFBQUEsVUFBVXhaLFdBQ25EZ1AsV0FBTW9ILFNBQU5wSCxtQkFBWWhQO0FBQUFBLFFBQUFBLENBQVEsR0FFdkJ5VixFQUFBLE9BQUE7QUFBQSxVQUFLQyxXQUFXSCxTQUFPYztBQUFBQSxVQUFRVCxPQUFPNUcsTUFBTXFLO0FBQUFBLFVBQWNyWixXQUN4REUsRUFBQSxPQUFBO0FBQUEsWUFBS3dWLFdBQVdILFNBQU9rRTtBQUFBQSxZQUFZN0QsT0FBTzVHLE1BQU15SztBQUFBQSxZQUFXelosV0FDeERnUCxXQUFNeUssZUFBTnpLLG1CQUFrQmhQO0FBQUFBLFVBQUFBLENBQVEsR0FFN0JFLEVBQUEsT0FBQTtBQUFBLFlBQUt3VixXQUFXSCxTQUFPbUU7QUFBQUEsWUFBYzlELE9BQU91QztBQUFBQSxZQUFZblksV0FDckRnUCxXQUFNcUgsV0FBTnJILG1CQUFjaFA7QUFBQUEsVUFBQUEsQ0FDWCxDQUFBO0FBQUEsUUFBQSxDQUFBLEdBRVJFLEVBQUEsT0FBQTtBQUFBLFVBQUt3VixXQUFXSCxTQUFPaUI7QUFBQUEsVUFBT1osT0FBT3lDO0FBQUFBLFVBQVdyWSxXQUM3Q2dQLFdBQU13SCxVQUFOeEgsbUJBQWFoUDtBQUFBQSxRQUFBQSxDQUNWLENBQUE7QUFBQSxNQUFBLENBQUE7QUFBQSxJQUFBLENBRU47QUFBQSxFQUVSO0FBRWVJLFFBQUFBLFVBQUFBLE9BQU9GLEVBQUM4WCxnQkFBYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzFGckMsUUFBTU0sUUFBWUEsTUFBTTs7QUFDdEIsVUFBTS9YLFFBQVFFO0FBQ1J1TyxVQUFBQSxRQUFRMkIsY0FBY3BRLEtBQUs7QUFDakMsVUFBTSxDQUFDdkIsUUFBUTJhLFlBQVksSUFBSTFJLFVBQVc7QUFDcENxRSxVQUFBQSxVQUFVeEIsV0FBV3ZULEtBQUs7QUFFaEMsV0FDRWtWLEVBQUEsT0FBQTtBQUFBLE1BQUtDLFdBQVdILFNBQU94VDtBQUFBQSxNQUFNNlQsT0FBTzVHLE1BQU1qTjtBQUFBQSxNQUFLL0IsV0FDN0NFLEVBQUEsT0FBQTtBQUFBLFFBQUt3VixXQUFXSCxTQUFPbEM7QUFBQUEsUUFBWXVDLE9BQU81RyxNQUFNcUU7QUFBQUEsTUFBQUEsQ0FBVyxHQUMzRG9DLEVBQUEsS0FBQTtBQUFBLFFBQ0VSLE9BQU1qRyxXQUFNak4sU0FBTmlOLG1CQUFZa0g7QUFBQUEsUUFDbEI1VixRQUFPO0FBQUEsUUFDUDBVLEtBQUk7QUFBQSxRQUNKVSxXQUFXSCxTQUFPTztBQUFBQSxRQUNsQlI7QUFBQUEsUUFBaUJ0VixXQUVqQnlWLEVBQUEsT0FBQTtBQUFBLFVBQUF6VixXQUNFRSxFQUFBLE9BQUE7QUFBQSxZQUFLd1YsV0FBV0gsU0FBT3FFO0FBQUFBLFlBQVVoRSxPQUFPNUcsTUFBTTRLO0FBQUFBLFlBQVM1WixXQUNwRGdQLFdBQU00SyxhQUFONUssbUJBQWdCaFA7QUFBQUEsVUFBQUEsQ0FBUSxHQUUzQkUsRUFBQSxPQUFBO0FBQUEsWUFBS3dWLFdBQVdILFNBQU9zRTtBQUFBQSxZQUFXakUsT0FBTzVHLE1BQU02SztBQUFBQSxZQUFVN1osV0FDdERnUCxXQUFNNkssY0FBTjdLLG1CQUFpQmhQO0FBQUFBLFVBQUFBLENBQVEsR0FFNUJFLEVBQUEsT0FBQTtBQUFBLFlBQUt3VixXQUFXSCxTQUFPdUU7QUFBQUEsWUFBVTlaLFVBQUE7QUFBQSxVQUFBLENBQWMsQ0FBQTtBQUFBLFFBQUEsQ0FBQSxHQUVqREUsRUFBQSxPQUFBO0FBQUEsVUFBS3dWLFdBQVdILFNBQU9jO0FBQUFBLFVBQVFULE9BQU81RyxNQUFNcUg7QUFBQUEsVUFBT3JXLFdBQ2hEZ1AsV0FBTXFILFdBQU5ySCxtQkFBY2hQO0FBQUFBLFFBQUFBLENBQ1gsQ0FBQTtBQUFBLE1BQUEsQ0FBQSxHQUVSRSxFQUFBLE9BQUE7QUFBQSxRQUNFd1YsV0FBVy9YLFdBQVc0WCxTQUFPaUIsT0FBTztBQUFBLFVBQ2xDLENBQUNqQixTQUFPa0IsU0FBUyxHQUFHelg7QUFBQUEsUUFBQUEsQ0FDckI7QUFBQSxRQUNENFcsT0FBTzVHLE1BQU0rSztBQUFBQSxRQUFVL1osVUFFdkJ5VixFQUFBLFFBQUE7QUFBQSxVQUFNQyxXQUFXSCxTQUFPbUI7QUFBQUEsVUFBVTFXLFdBQ2hDRSxFQUFBLFFBQUE7QUFBQSxZQUFBRixXQUFPZ1AsV0FBTStLLGNBQU4vSyxtQkFBaUJoUDtBQUFBQSxVQUFBQSxDQUFRLEdBQ2hDRSxFQUFBLFFBQUE7QUFBQSxZQUFNd1YsV0FBV0gsU0FBT29CO0FBQUFBLFlBQWFmLE9BQU81RyxNQUFNZ0w7QUFBQUEsWUFBaUIxRSxTQUFTcUU7QUFBQUEsWUFBYTNaLFVBQ3RGaEIsVUFBU2dRLFdBQU1nTCxvQkFBTmhMLG1CQUF1QmlMLFlBQVdqTCxXQUFNZ0wsb0JBQU5oTCxtQkFBdUJrTDtBQUFBQSxVQUFBQSxDQUM5RCxDQUFBO0FBQUEsUUFBQSxDQUFBO0FBQUEsTUFBQSxDQUVMLENBQUE7QUFBQSxJQUFBLENBQ0Y7QUFBQSxFQUVWO0FDNUNBLFFBQU1wRCxZQUFnQkEsTUFBTTtBQUNwQjNCLFVBQUFBLFVBQVUvVixJQUFPLElBQUk7QUFDM0IsVUFBTW1CLFFBQVFFO0FBQ2QsVUFBTStMLFNBQVM7QUFDVHlGLFVBQUFBLGNBQWNwRixZQUFZdE0sT0FBT2lNLE1BQU07QUFDdkN3QyxVQUFBQSxRQUFRMkIsY0FBY3NCLFdBQVc7QUFFdkMsV0FDRS9SLEVBQUEsT0FBQTtBQUFBLE1BQUt5VixLQUFLUjtBQUFBQSxNQUFRblYsWUFDZGdQLCtCQUFPaFAsYUFBWSxDQUFBLEdBQUl3SixJQUFJa08sQ0FBQUEsVUFDM0J4WCxFQUFDSCxjQUFZO0FBQUEsUUFBQ0UsT0FBT3lYO0FBQUFBLFFBQU0xWCxVQUN6QkUsRUFBQ29ZLE9BQUssRUFBQTtBQUFBLE1BQUEsQ0FFVCxDQUFBO0FBQUEsSUFBQSxDQUNHO0FBQUEsRUFFVjtBQUVlbFksUUFBQUEsVUFBQUEsT0FBT0YsRUFBQzRXLGNBQVk7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2xCbkMsUUFBTXFELE9BQVdBLE1BQU07O0FBQ3JCLFVBQU01WixRQUFRRTtBQUNSdU8sVUFBQUEsUUFBUTJCLGNBQWNwUSxLQUFLO0FBRWpDLFdBQ0VMLEVBQUEsT0FBQTtBQUFBLE1BQ0V3VixXQUFXL1gsV0FBVzRYLFNBQU94VCxNQUFNO0FBQUEsUUFDakMsQ0FBQ3dULFNBQU9qSixPQUFPLElBQUcvTCwrQkFBT2lNLFlBQVc7QUFBQSxNQUFBLENBQ3JDO0FBQUEsTUFDRG9KLE9BQU94TCxLQUFLNEUsTUFBTWpOLE1BQU0sR0FBR3dSLGlCQUFpQjtBQUFBLE1BQUV2VCxXQUU3Q2dQLFdBQU1qTixTQUFOaU4sbUJBQVloUDtBQUFBQSxJQUFBQSxDQUNUO0FBQUEsRUFFVjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2RBLFFBQU1vYSxVQUFjQSxNQUFNOztBQUN4QixVQUFNN1osUUFBUUU7QUFDUnVPLFVBQUFBLFFBQVEyQixjQUFjcFEsS0FBSztBQUVqQyxVQUFNOFosWUFBWWpRLEtBQUs0RSxNQUFNak4sTUFBTSxHQUFHd1IsaUJBQWlCO0FBRXZELFdBQ0VrQyxFQUFBLE9BQUE7QUFBQSxNQUFLQyxXQUFXSCxTQUFPeFQ7QUFBQUEsTUFBSy9CLFdBQzFCeVYsRUFBQSxPQUFBO0FBQUEsUUFBS0MsV0FBV0gsU0FBTzJEO0FBQUFBLFFBQUlsWixXQUN6QkUsRUFBQSxPQUFBO0FBQUEsVUFBS3dWLFdBQVdILFNBQU8rRTtBQUFBQSxVQUFTMUUsT0FBT3lFO0FBQUFBLFFBQUFBLENBQVUsR0FDakRuYSxFQUFBLE9BQUE7QUFBQSxVQUFLd1YsV0FBV0gsU0FBTzREO0FBQUFBLFVBQVV2RCxPQUFPeUU7QUFBQUEsVUFBVXJhLFdBQUVnUCxXQUFNak4sU0FBTmlOLG1CQUFZdUw7QUFBQUEsUUFBQUEsQ0FBZSxDQUFBO0FBQUEsTUFBQSxDQUFBLEdBRWpGOUUsRUFBQSxPQUFBO0FBQUEsUUFBS0MsV0FBV0gsU0FBT2lGO0FBQUFBLFFBQUt4YSxXQUMxQkUsRUFBQSxPQUFBO0FBQUEsVUFBS3dWLFdBQVdILFNBQU9rRjtBQUFBQSxVQUFVN0UsT0FBTzVHLE1BQU13TDtBQUFBQSxVQUFLeGEsVUFBQTtBQUFBLFFBQUEsQ0FBQSxHQUNuREUsRUFBQSxPQUFBO0FBQUEsVUFBS3dWLFdBQVdILFNBQU9tRjtBQUFBQSxVQUFXOUUsT0FBT3lFO0FBQUFBLFVBQVVyYSxXQUFFZ1AsV0FBTWpOLFNBQU5pTixtQkFBWTJMO0FBQUFBLFFBQUFBLENBQWEsQ0FBQTtBQUFBLE1BQUEsQ0FBQSxHQUVoRmxGLEVBQUEsT0FBQTtBQUFBLFFBQUtDLFdBQVcvWCxXQUFXNFgsU0FBTzJELEtBQUszRCxTQUFPcUYsVUFBVTtBQUFBLFFBQUU1YSxXQUN4REUsRUFBQSxPQUFBO0FBQUEsVUFBS3dWLFdBQVdILFNBQU8rRTtBQUFBQSxVQUFTMUUsT0FBT3lFO0FBQUFBLFFBQUFBLENBQVUsR0FDakRuYSxFQUFBLE9BQUE7QUFBQSxVQUFLd1YsV0FBV0gsU0FBTzREO0FBQUFBLFVBQVV2RCxPQUFPeUU7QUFBQUEsVUFBVXJhLFdBQUVnUCxXQUFNak4sU0FBTmlOLG1CQUFZNkw7QUFBQUEsUUFBQUEsQ0FBZSxDQUFBO0FBQUEsTUFBQSxDQUMzRSxDQUFBO0FBQUEsSUFBQSxDQUNGO0FBQUEsRUFFVjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3RCQSxRQUFNQyxnQkFBb0JBLE1BQU07QUFDOUIsVUFBTXZhLFFBQVFFO0FBQ1J1TyxVQUFBQSxRQUFRMkIsY0FBY3BRLEtBQUs7QUFFakMsV0FDRWtWLEVBQUEsT0FBQTtBQUFBLE1BQ0VDLFdBQVcvWCxXQUFXNFgsT0FBT3hULE1BQU07QUFBQSxRQUNqQyxDQUFDd1QsT0FBT2pKLE9BQU8sSUFBRy9MLCtCQUFPaU0sWUFBVztBQUFBLFFBQ3BDLENBQUMrSSxPQUFPbEosTUFBTSxJQUFHOUwsK0JBQU9pTSxZQUFXO0FBQUEsUUFDbkMsQ0FBQytJLE9BQU9uSixNQUFNLElBQUc3TCwrQkFBT2lNLFlBQVc7QUFBQSxNQUFBLENBQ3BDO0FBQUEsTUFDRG9KLE9BQU94TCxLQUFLNEUsTUFBTWpOLE1BQU0sR0FBR3dSLGlCQUFpQjtBQUFBLE1BQUV2VCxXQUU5Q3lWLEVBQUEsT0FBQTtBQUFBLFFBQUtDLFdBQVdILE9BQU8rQjtBQUFBQSxRQUFNdFgsV0FDM0JFLEVBQUEsT0FBQTtBQUFBLFVBQUt3VixXQUFXSCxPQUFPd0Y7QUFBQUEsVUFBWW5GLE9BQU81RyxNQUFNK0w7QUFBQUEsVUFBVy9hLFVBQ3hEZ1AsTUFBTStMLFdBQVcvYTtBQUFBQSxRQUFBQSxDQUFRLEdBRTVCRSxFQUFBLE9BQUE7QUFBQSxVQUFLd1YsV0FBV0gsT0FBT3lGO0FBQUFBLFVBQVlwRixPQUFPNUcsTUFBTWdNO0FBQUFBLFVBQVdoYixVQUN4RGdQLE1BQU1nTSxXQUFXaGI7QUFBQUEsUUFBQUEsQ0FDZCxDQUFBO0FBQUEsTUFBQSxDQUFBLEdBRVJ5VixFQUFBLE9BQUE7QUFBQSxRQUFBelYsV0FDRXlWLEVBQUEsT0FBQTtBQUFBLFVBQUtDLFdBQVdILE9BQU93RDtBQUFBQSxVQUFLL1ksV0FDMUJFLEVBQUEsT0FBQTtBQUFBLFlBQUt3VixXQUFXSCxPQUFPeUQ7QUFBQUEsWUFBVXBELE9BQU81RyxNQUFNbUg7QUFBQUEsVUFBQUEsQ0FBSyxHQUNuRGpXLEVBQUEsT0FBQTtBQUFBLFlBQUt3VixXQUFXSCxPQUFPMEQ7QUFBQUEsWUFBVXJELE9BQU81RyxNQUFNaUs7QUFBQUEsWUFBU2paLFVBQ3BEZ1AsTUFBTWlNLFVBQVVqYjtBQUFBQSxVQUFBQSxDQUFRLEdBRTNCRSxFQUFBLE9BQUE7QUFBQSxZQUFLd1YsV0FBV0gsT0FBTzJGO0FBQUFBLFlBQVd0RixPQUFPNUcsTUFBTS9PO0FBQUFBLFlBQU1ELFVBQ2xEZ1AsTUFBTW1NLE9BQU9uYjtBQUFBQSxVQUFBQSxDQUNWLENBQUE7QUFBQSxRQUFBLENBQUEsR0FFUnlWLEVBQUEsT0FBQTtBQUFBLFVBQUtDLFdBQVdILE9BQU93RDtBQUFBQSxVQUFLL1ksV0FDMUJFLEVBQUEsT0FBQTtBQUFBLFlBQUt3VixXQUFXSCxPQUFPeUQ7QUFBQUEsWUFBVXBELE9BQU81RyxNQUFNbUg7QUFBQUEsVUFBQUEsQ0FBSyxHQUNuRGpXLEVBQUEsT0FBQTtBQUFBLFlBQUt3VixXQUFXSCxPQUFPMEQ7QUFBQUEsWUFBVXJELE9BQU81RyxNQUFNaUs7QUFBQUEsWUFBU2paLFVBQ3BEZ1AsTUFBTW9NLFVBQVVwYjtBQUFBQSxVQUFBQSxDQUFRLEdBRTNCRSxFQUFBLE9BQUE7QUFBQSxZQUFLd1YsV0FBV0gsT0FBTzJGO0FBQUFBLFlBQVd0RixPQUFPNUcsTUFBTS9PO0FBQUFBLFlBQU1ELFVBQ2xEZ1AsTUFBTXFNLE9BQU9yYjtBQUFBQSxVQUFBQSxDQUNWLENBQUE7QUFBQSxRQUFBLENBQ0YsQ0FBQTtBQUFBLE1BQUEsQ0FDRixDQUFBO0FBQUEsSUFBQSxDQUNGO0FBQUEsRUFFVjtBQzdDQSxRQUFNc2Isa0JBQWtCQSxDQUFDQyxTQUFrQixPQUFPOztBQUNoRCxVQUFNQyxhQUFhRCxPQUFPM1E7QUFDMUIsVUFBTSxDQUFDNlEsYUFBYUMsY0FBYyxJQUFJeGMsRUFBaUIsQ0FBQztBQUN4RCxVQUFNeWMscUJBQW9CSixZQUFPRSxlQUFlLENBQUMsTUFBdkJGLG1CQUEwQkk7QUFFcERsYyxNQUFVLE1BQU07QUFDZCxZQUFNbWMsU0FBU0EsTUFBTTtBQUNuQkYsdUJBQWUxYSxDQUFTQSxXQUFBO0FBQ3RCLGNBQUlBLFNBQVEsSUFBSXdhO0FBQVksbUJBQU94YSxTQUFRO0FBQ3BDLGlCQUFBO0FBQUEsUUFBQSxDQUNSO0FBQUEsTUFBQTtBQUdHNmEsWUFBQUEsVUFBVW5jLFdBQVdrYyxRQUFRRCxpQkFBaUI7QUFFN0MsYUFBQSxNQUFNcmMsYUFBYXVjLE9BQU87QUFBQSxPQUNoQyxDQUFDSCxnQkFBZ0JGLFlBQVlHLG1CQUFtQkYsV0FBVyxDQUFDO0FBRXhEQSxXQUFBQTtBQUFBQSxFQUNUO0FDUkEsUUFBTUssMEJBQTBCO0FBRWhDLFFBQU1DLFdBQWVBLE1BQU07O0FBQ25CNUcsVUFBQUEsVUFBVS9WLElBQU8sSUFBSTtBQUMzQixVQUFNbUIsUUFBUUU7QUFDZCxVQUFNK0wsU0FBU00sbUJBQW1CO0FBQUEsTUFBRUMsV0FBV29JO0FBQUFBLElBQUFBLENBQVM7QUFDbERsRCxVQUFBQSxjQUFjcEYsWUFBWXRNLE9BQU9pTSxNQUFNO0FBQ3ZDd0MsVUFBQUEsUUFBUTJCLGNBQWNzQixXQUFXO0FBQ2pDcUQsVUFBQUEsVUFBVXhCLFdBQVc3QixXQUFXO0FBRWhDK0osVUFBQUEsV0FBV0EsQ0FBQ3BELFdBQ2Y7QUFBQSxNQUNDeEMsTUFBTWxXLEVBQUNpYSxNQUFPLEVBQUE7QUFBQSxNQUNkOEIsU0FBUy9iLEVBQUNrYSxTQUFVLEVBQUE7QUFBQSxNQUNwQjhCLGVBQWVoYyxFQUFDNGEsZUFBYSxFQUFBO0FBQUEsT0FDN0JsQyxLQUFJO0FBRUZ1RCxVQUFBQSxjQUFjbk4sTUFBTWhQLFlBQVksQ0FBQSxHQUFJb2MsT0FBT0MsT0FBTyxFQUFFN1MsSUFBSThTLENBQVVBLFdBQUE7O0FBQUE7QUFBQSxRQUN0RSxHQUFHQTtBQUFBQSxRQUNIQyxnQkFBZUQsTUFBQUEsVUFBQUEsZ0JBQUFBLE9BQU92YSxTQUFQdWEsZ0JBQUFBLElBQWFDO0FBQUFBLFFBQzVCWixxQkFBbUJXLE1BQUFBLFVBQUFBLGdCQUFBQSxPQUFPdmEsU0FBUHVhLGdCQUFBQSxJQUFhWCxzQkFBcUJHO0FBQUFBLE1BQ3JEO0FBQUEsS0FBQTtBQUVJVSxVQUFBQSxlQUFlbEIsZ0JBQWdCYSxVQUFVO0FBQy9DLFVBQU1NLGFBQWE5TCxjQUFjd0wsV0FBV0ssWUFBWSxLQUFLLENBQUUsQ0FBQTtBQUUvRCxVQUFNRSxvQkFBa0JELDhDQUFZMWEsU0FBWjBhLG1CQUFrQkUsdUJBQ3RDNVMsTUFBSzBTLHlDQUFZMWEsU0FBUSxDQUFJLEdBQUEsR0FBR3dSLGlCQUFpQixJQUNqRHhKLEtBQUtpRixNQUFNcUUsWUFBWSxHQUFHRSxpQkFBaUI7QUFFL0MsV0FDRWtDLEVBQUEsS0FBQTtBQUFBLE1BQ0VFLEtBQUtSO0FBQUFBLE1BQ0xGLE9BQU1qRyxXQUFNak4sU0FBTmlOLG1CQUFZa0g7QUFBQUEsTUFDbEI1VixRQUFPO0FBQUEsTUFDUDBVLEtBQUk7QUFBQSxNQUNKVSxXQUFXL1gsV0FBVzRYLFNBQU94VCxNQUFNO0FBQUEsUUFDakMsQ0FBQ3dULFNBQU9qSixPQUFPLEdBQUdFLFdBQVc7QUFBQSxRQUM3QixDQUFDK0ksU0FBT2xKLE1BQU0sR0FBR0csV0FBVztBQUFBLFFBQzVCLENBQUMrSSxTQUFPbkosTUFBTSxHQUFHSSxXQUFXO0FBQUEsUUFDNUIsQ0FBQytJLFNBQU93QixRQUFRLEtBQUcvSCxXQUFNak4sU0FBTmlOLG1CQUFZZ0ksYUFBWTtBQUFBLE1BQUEsQ0FDNUM7QUFBQSxNQUNEcEIsT0FBTzVHLE1BQU1qTjtBQUFBQSxNQUNidVQ7QUFBQUEsTUFBaUJ0VixXQUVqQkUsRUFBQSxPQUFBO0FBQUEsUUFBS3dWLFdBQVdILFNBQU9sQztBQUFBQSxRQUFZdUMsT0FBTzhHO0FBQUFBLE1BQUFBLENBQWdCLEdBQzFEeGMsRUFBQSxPQUFBO0FBQUEsUUFBS3dWLFdBQVdILFNBQU9nQztBQUFBQSxRQUFXM0IsT0FBTzVHLE1BQU11STtBQUFBQSxRQUFVdlgsV0FDdERnUCxXQUFNdUksY0FBTnZJLG1CQUFpQmhQO0FBQUFBLE1BQUFBLENBQVEsR0FHNUJ5VixFQUFBLE9BQUE7QUFBQSxRQUFLQyxXQUFXSCxTQUFPZ0U7QUFBQUEsUUFBUXZaLFdBQzdCRSxFQUFBLE9BQUE7QUFBQSxVQUFLd1YsV0FBV0gsU0FBT2pEO0FBQUFBLFVBQUt0UyxVQUMxQkUsRUFBQSxPQUFBO0FBQUEsWUFBS3dWLFdBQVdILFNBQU9ZO0FBQUFBLFlBQU1QLE9BQU81RyxNQUFNbUg7QUFBQUEsVUFBQUEsQ0FBSztBQUFBLFFBQUEsQ0FBRyxHQUVwRGpXLEVBQUEsT0FBQTtBQUFBLFVBQUt3VixXQUFXSCxTQUFPc0M7QUFBQUEsVUFBTzdYLFdBQzFCZ1AsTUFBTWhQLFlBQVksQ0FBQSxHQUFJd0osSUFBSSxDQUFDa08sT0FBTzFXOztBQUNsQ2QscUJBQUEsT0FBQTtBQUFBLGNBQ0V3VixXQUFXSCxTQUFPK0c7QUFBQUEsY0FDbEIxRyxPQUFPO0FBQUEsZ0JBQ0wyRyxlQUFlQyxpQkFBaUJ4YixTQUFRdVUsV0FBT21DLE1BQUFBLE1BQU0zVixTQUFOMlYsZ0JBQUFBLElBQVk2RSxrQkFBaUIsYUFBYSxJQUFJO0FBQUEsZ0JBQzdGWixtQkFBb0IsSUFBRWpFLE1BQUFBLE1BQU0zVixTQUFOMlYsZ0JBQUFBLElBQVlpRTtBQUFBQSxjQUNwQztBQUFBLGNBQUUzYixVQUVGRSxFQUFDSCxjQUFZO0FBQUEsZ0JBQUNFLE9BQU87QUFBQSxrQkFBRSxHQUFHeVg7QUFBQUEsa0JBQU9sTDtBQUFBQSxnQkFBTztBQUFBLGdCQUFFeE0sVUFBRWdjLFNBQVN0RSxNQUFNa0IsSUFBSTtBQUFBLGNBQUEsQ0FBQztBQUFBLFlBQUEsQ0FFbkU7QUFBQSxXQUFBO0FBQUEsUUFBQSxDQUFDLEdBRUpuRCxFQUFBLE9BQUE7QUFBQSxVQUFLQyxXQUFXSCxTQUFPdUM7QUFBQUEsVUFBTTlYLFdBQzNCRSxFQUFBLE9BQUE7QUFBQSxZQUFLd1YsV0FBV0gsU0FBT1k7QUFBQUEsWUFBTVAsT0FBTzVHLE1BQU1tSDtBQUFBQSxVQUFBQSxDQUFLLEdBRS9DalcsRUFBQSxPQUFBO0FBQUEsWUFBS3dWLFdBQVdILFNBQU84RDtBQUFBQSxZQUFjclosVUFDbkN5VixFQUFBLE9BQUE7QUFBQSxjQUFLQyxXQUFXSCxTQUFPYztBQUFBQSxjQUFRVCxPQUFPNUcsTUFBTXFIO0FBQUFBLGNBQU9yVyxXQUNqREUsRUFBQSxPQUFBO0FBQUEsZ0JBQUt3VixXQUFXSCxTQUFPWTtBQUFBQSxnQkFBTVAsT0FBTzVHLE1BQU1tSDtBQUFBQSxjQUFBQSxDQUFLLElBQzlDbkgsV0FBTXFILFdBQU5ySCxtQkFBY2hQLFFBQVE7QUFBQSxZQUFBLENBQUE7QUFBQSxVQUFBLENBRXJCLENBQUE7QUFBQSxRQUFBLENBQ0YsQ0FBQTtBQUFBLE1BQUEsQ0FDRixDQUFBO0FBQUEsSUFBQSxDQUNKO0FBQUEsRUFFUjtBQUVlSSxRQUFBQSxRQUFBQSxPQUFPRixFQUFDNmIsYUFBVztBQ2hHbEMsUUFBTWEsY0FBY0EsQ0FDbEJyYyxPQUNBME8sT0FDQXlCLE1BQ0F6USxPQUNBZ00sWUFBVTRRLFlBQ1A7QUFDSCxVQUFNQyxXQUFXO0FBQUEsTUFBRSxHQUFHdmM7QUFBQUEsSUFBQUE7QUFFdEIwTCxjQUFRakQsUUFBUXdELENBQVUsV0FBQTtBQUN4QnNRLGVBQVM3TixLQUFLLElBQUk7QUFBQSxRQUNoQixHQUFHNk4sU0FBUzdOLEtBQUs7QUFBQSxRQUNqQixDQUFDekMsTUFBTSxHQUFHO0FBQUEsVUFDUixHQUFHc1EsU0FBUzdOLEtBQUssRUFBRXpDLE1BQU07QUFBQSxVQUN6QixDQUFDa0UsSUFBSSxHQUFHLE9BQU96USxVQUFVLGFBQWFBLE1BQU1vSyxJQUFJeVMsVUFBVyxHQUFFN04sU0FBU3pDLFVBQVVrRSxNQUFNLENBQUMsSUFBSXpRO0FBQUFBLFFBQzdGO0FBQUEsTUFBQTtBQUFBLElBQ0YsQ0FDRDtBQUNNNmMsV0FBQUE7QUFBQUEsRUFDVDs7Ozs7Ozs7Ozs7IiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzAsMSwyLDQsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwM119
|