UNPKG

text-to-map

Version:

Text To Map usiluje o lepší, strojově zpracovatelné využití částí vyhlášek s výčtem ulic a dalších lokací. Jde o rozšiřitelnou sadu konceptů a nástrojů, které zajistí hladký převod výčtu ulic a jejich rozsahů v lidsky srozumitelném jazyce do strojově zpra

82 lines 14.7 kB
import { roundToNDecimalPlaces } from "./helpers"; /** * Convert JTSK to WGS84 - taken from @arodax/jtsk2wgs84 package that had some * import issues. * * @param x * @param y * @param h * @return {{jtsk_x: number, jtsk_y: number, lon: number, lat: number, altitude: number}} */ export default function jtsk2wgs84(x, y, h = 200) { const originalX = x; const originalY = y; let a = 6377397.15508; let e = 0.081696831215303; let n = 0.97992470462083; let uRo = 12310230.12797036; let sinUQ = 0.863499969506341; let cosUQ = 0.504348889819882; let sinVQ = 0.420215144586493; let cosVQ = 0.907424504992097; let alpha = 1.000597498371542; let k = 1.003419163966575; let ro = Math.sqrt(x * x + y * y); let epsilon = 2 * Math.atan(y / (ro + x)); let D = epsilon / n; let S = 2 * Math.atan(Math.exp((1 / n) * Math.log(uRo / ro))) - Math.PI / 2; let sinS = Math.sin(S); let cosS = Math.cos(S); let sinU = sinUQ * sinS - cosUQ * cosS * Math.cos(D); let cosU = Math.sqrt(1 - sinU * sinU); let sinDV = (Math.sin(D) * cosS) / cosU; let cosDV = Math.sqrt(1 - sinDV * sinDV); let sinV = sinVQ * cosDV - cosVQ * sinDV; let cosV = cosVQ * cosDV + sinVQ * sinDV; let lJtsk = (2 * Math.atan(sinV / (1 + cosV))) / alpha; let t = Math.exp((2 / alpha) * Math.log((1 + sinU) / cosU / k)); let pom = (t - 1) / (t + 1); let sinB = pom; do { sinB = pom; pom = t * Math.exp(e * Math.log((1 + e * sinB) / (1 - e * sinB))); pom = (pom - 1) / (pom + 1); } while (Math.abs(pom - sinB) > 1e-15); let bJtsk = Math.atan(pom / Math.sqrt(1 - pom * pom)); let f1 = 299.152812853; let e2 = 1 - (1 - 1 / f1) * (1 - 1 / f1); ro = a / Math.sqrt(1 - e2 * Math.sin(bJtsk) * Math.sin(bJtsk)); x = (ro + h) * Math.cos(bJtsk) * Math.cos(lJtsk); y = (ro + h) * Math.cos(bJtsk) * Math.sin(lJtsk); let z = ((1 - e2) * ro + h) * Math.sin(bJtsk); let dx = 570.69; let dy = 85.69; let dz = 462.84; let wz = ((-5.2611 / 3600) * Math.PI) / 180; let wy = ((-1.58676 / 3600) * Math.PI) / 180; let wx = ((-4.99821 / 3600) * Math.PI) / 180; let m = 3.543e-6; let xn = dx + (1 + m) * (x + wz * y - wy * z); let yn = dy + (1 + m) * (-wz * x + y + wx * z); let zn = dz + (1 + m) * (wy * x - wx * y + z); a = 6378137.0; f1 = 298.257223563; let aB = f1 / (f1 - 1); let p = Math.sqrt(xn * xn + yn * yn); e2 = 1 - (1 - 1 / f1) * (1 - 1 / f1); let theta = Math.atan((zn * aB) / p); let st = Math.sin(theta); let ct = Math.cos(theta); t = (zn + e2 * aB * a * st * st * st) / (p - e2 * a * ct * ct * ct); let B = Math.atan(t); let L = 2 * Math.atan(yn / (p + xn)); h = Math.sqrt(1 + t * t) * (p - a / Math.sqrt(1 + (1 - e2) * t * t)); return { jtsk_x: originalX, jtsk_y: originalY, lat: roundToNDecimalPlaces((B / Math.PI) * 180, 6), lon: roundToNDecimalPlaces((L / Math.PI) * 180, 6), altitude: Math.round(h * 100) / 100, }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianRzazJ3Z3M4NC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9qdHNrMndnczg0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQVVsRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxPQUFPLFVBQVUsVUFBVSxDQUNoQyxDQUFTLEVBQ1QsQ0FBUyxFQUNULElBQVksR0FBRztJQUVmLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNwQixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFFcEIsSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDO0lBQ3RCLElBQUksQ0FBQyxHQUFHLGlCQUFpQixDQUFDO0lBQzFCLElBQUksQ0FBQyxHQUFHLGdCQUFnQixDQUFDO0lBQ3pCLElBQUksR0FBRyxHQUFHLGlCQUFpQixDQUFDO0lBQzVCLElBQUksS0FBSyxHQUFHLGlCQUFpQixDQUFDO0lBQzlCLElBQUksS0FBSyxHQUFHLGlCQUFpQixDQUFDO0lBQzlCLElBQUksS0FBSyxHQUFHLGlCQUFpQixDQUFDO0lBQzlCLElBQUksS0FBSyxHQUFHLGlCQUFpQixDQUFDO0lBQzlCLElBQUksS0FBSyxHQUFHLGlCQUFpQixDQUFDO0lBQzlCLElBQUksQ0FBQyxHQUFHLGlCQUFpQixDQUFDO0lBRTFCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM1RSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkIsSUFBSSxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3RDLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDeEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLElBQUksSUFBSSxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUN6QyxJQUFJLElBQUksR0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDekMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUN2RCxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFNUIsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDO0lBRWYsR0FBRztRQUNELElBQUksR0FBRyxHQUFHLENBQUM7UUFDWCxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQzdCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFO0lBRXZDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRXRELElBQUksRUFBRSxHQUFHLGFBQWEsQ0FBQztJQUN2QixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN6QyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pELENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU5QyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFDaEIsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQ2YsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQzVDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQzdDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQzdDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQztJQUNqQixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0MsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRTlDLENBQUMsR0FBRyxTQUFTLENBQUM7SUFDZCxFQUFFLEdBQUcsYUFBYSxDQUFDO0lBQ25CLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNyQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QixDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDcEUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVyRSxPQUFPO1FBQ0wsTUFBTSxFQUFFLFNBQVM7UUFDakIsTUFBTSxFQUFFLFNBQVM7UUFDakIsR0FBRyxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNsRCxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRztLQUNwQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJvdW5kVG9ORGVjaW1hbFBsYWNlcyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29udmVyc2lvblJlc3VsdCB7XHJcbiAganRza194OiBudW1iZXI7XHJcbiAganRza195OiBudW1iZXI7XHJcbiAgbGF0OiBudW1iZXI7XHJcbiAgbG9uOiBudW1iZXI7XHJcbiAgYWx0aXR1ZGU6IG51bWJlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgSlRTSyB0byBXR1M4NCAtIHRha2VuIGZyb20gQGFyb2RheC9qdHNrMndnczg0IHBhY2thZ2UgdGhhdCBoYWQgc29tZVxyXG4gKiBpbXBvcnQgaXNzdWVzLlxyXG4gKlxyXG4gKiBAcGFyYW0geFxyXG4gKiBAcGFyYW0geVxyXG4gKiBAcGFyYW0gaFxyXG4gKiBAcmV0dXJuIHt7anRza194OiBudW1iZXIsIGp0c2tfeTogbnVtYmVyLCBsb246IG51bWJlciwgbGF0OiBudW1iZXIsIGFsdGl0dWRlOiBudW1iZXJ9fVxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ganRzazJ3Z3M4NChcclxuICB4OiBudW1iZXIsXHJcbiAgeTogbnVtYmVyLFxyXG4gIGg6IG51bWJlciA9IDIwMFxyXG4pOiBDb252ZXJzaW9uUmVzdWx0IHtcclxuICBjb25zdCBvcmlnaW5hbFggPSB4O1xyXG4gIGNvbnN0IG9yaWdpbmFsWSA9IHk7XHJcblxyXG4gIGxldCBhID0gNjM3NzM5Ny4xNTUwODtcclxuICBsZXQgZSA9IDAuMDgxNjk2ODMxMjE1MzAzO1xyXG4gIGxldCBuID0gMC45Nzk5MjQ3MDQ2MjA4MztcclxuICBsZXQgdVJvID0gMTIzMTAyMzAuMTI3OTcwMzY7XHJcbiAgbGV0IHNpblVRID0gMC44NjM0OTk5Njk1MDYzNDE7XHJcbiAgbGV0IGNvc1VRID0gMC41MDQzNDg4ODk4MTk4ODI7XHJcbiAgbGV0IHNpblZRID0gMC40MjAyMTUxNDQ1ODY0OTM7XHJcbiAgbGV0IGNvc1ZRID0gMC45MDc0MjQ1MDQ5OTIwOTc7XHJcbiAgbGV0IGFscGhhID0gMS4wMDA1OTc0OTgzNzE1NDI7XHJcbiAgbGV0IGsgPSAxLjAwMzQxOTE2Mzk2NjU3NTtcclxuXHJcbiAgbGV0IHJvID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpO1xyXG4gIGxldCBlcHNpbG9uID0gMiAqIE1hdGguYXRhbih5IC8gKHJvICsgeCkpO1xyXG4gIGxldCBEID0gZXBzaWxvbiAvIG47XHJcbiAgbGV0IFMgPSAyICogTWF0aC5hdGFuKE1hdGguZXhwKCgxIC8gbikgKiBNYXRoLmxvZyh1Um8gLyBybykpKSAtIE1hdGguUEkgLyAyO1xyXG4gIGxldCBzaW5TID0gTWF0aC5zaW4oUyk7XHJcbiAgbGV0IGNvc1MgPSBNYXRoLmNvcyhTKTtcclxuICBsZXQgc2luVSA9IHNpblVRICogc2luUyAtIGNvc1VRICogY29zUyAqIE1hdGguY29zKEQpO1xyXG4gIGxldCBjb3NVID0gTWF0aC5zcXJ0KDEgLSBzaW5VICogc2luVSk7XHJcbiAgbGV0IHNpbkRWID0gKE1hdGguc2luKEQpICogY29zUykgLyBjb3NVO1xyXG4gIGxldCBjb3NEViA9IE1hdGguc3FydCgxIC0gc2luRFYgKiBzaW5EVik7XHJcbiAgbGV0IHNpblYgPSBzaW5WUSAqIGNvc0RWIC0gY29zVlEgKiBzaW5EVjtcclxuICBsZXQgY29zViA9IGNvc1ZRICogY29zRFYgKyBzaW5WUSAqIHNpbkRWO1xyXG4gIGxldCBsSnRzayA9ICgyICogTWF0aC5hdGFuKHNpblYgLyAoMSArIGNvc1YpKSkgLyBhbHBoYTtcclxuICBsZXQgdCA9IE1hdGguZXhwKCgyIC8gYWxwaGEpICogTWF0aC5sb2coKDEgKyBzaW5VKSAvIGNvc1UgLyBrKSk7XHJcbiAgbGV0IHBvbSA9ICh0IC0gMSkgLyAodCArIDEpO1xyXG5cclxuICBsZXQgc2luQiA9IHBvbTtcclxuXHJcbiAgZG8ge1xyXG4gICAgc2luQiA9IHBvbTtcclxuICAgIHBvbSA9IHQgKiBNYXRoLmV4cChlICogTWF0aC5sb2coKDEgKyBlICogc2luQikgLyAoMSAtIGUgKiBzaW5CKSkpO1xyXG4gICAgcG9tID0gKHBvbSAtIDEpIC8gKHBvbSArIDEpO1xyXG4gIH0gd2hpbGUgKE1hdGguYWJzKHBvbSAtIHNpbkIpID4gMWUtMTUpO1xyXG5cclxuICBsZXQgYkp0c2sgPSBNYXRoLmF0YW4ocG9tIC8gTWF0aC5zcXJ0KDEgLSBwb20gKiBwb20pKTtcclxuXHJcbiAgbGV0IGYxID0gMjk5LjE1MjgxMjg1MztcclxuICBsZXQgZTIgPSAxIC0gKDEgLSAxIC8gZjEpICogKDEgLSAxIC8gZjEpO1xyXG4gIHJvID0gYSAvIE1hdGguc3FydCgxIC0gZTIgKiBNYXRoLnNpbihiSnRzaykgKiBNYXRoLnNpbihiSnRzaykpO1xyXG4gIHggPSAocm8gKyBoKSAqIE1hdGguY29zKGJKdHNrKSAqIE1hdGguY29zKGxKdHNrKTtcclxuICB5ID0gKHJvICsgaCkgKiBNYXRoLmNvcyhiSnRzaykgKiBNYXRoLnNpbihsSnRzayk7XHJcbiAgbGV0IHogPSAoKDEgLSBlMikgKiBybyArIGgpICogTWF0aC5zaW4oYkp0c2spO1xyXG5cclxuICBsZXQgZHggPSA1NzAuNjk7XHJcbiAgbGV0IGR5ID0gODUuNjk7XHJcbiAgbGV0IGR6ID0gNDYyLjg0O1xyXG4gIGxldCB3eiA9ICgoLTUuMjYxMSAvIDM2MDApICogTWF0aC5QSSkgLyAxODA7XHJcbiAgbGV0IHd5ID0gKCgtMS41ODY3NiAvIDM2MDApICogTWF0aC5QSSkgLyAxODA7XHJcbiAgbGV0IHd4ID0gKCgtNC45OTgyMSAvIDM2MDApICogTWF0aC5QSSkgLyAxODA7XHJcbiAgbGV0IG0gPSAzLjU0M2UtNjtcclxuICBsZXQgeG4gPSBkeCArICgxICsgbSkgKiAoeCArIHd6ICogeSAtIHd5ICogeik7XHJcbiAgbGV0IHluID0gZHkgKyAoMSArIG0pICogKC13eiAqIHggKyB5ICsgd3ggKiB6KTtcclxuICBsZXQgem4gPSBkeiArICgxICsgbSkgKiAod3kgKiB4IC0gd3ggKiB5ICsgeik7XHJcblxyXG4gIGEgPSA2Mzc4MTM3LjA7XHJcbiAgZjEgPSAyOTguMjU3MjIzNTYzO1xyXG4gIGxldCBhQiA9IGYxIC8gKGYxIC0gMSk7XHJcbiAgbGV0IHAgPSBNYXRoLnNxcnQoeG4gKiB4biArIHluICogeW4pO1xyXG4gIGUyID0gMSAtICgxIC0gMSAvIGYxKSAqICgxIC0gMSAvIGYxKTtcclxuICBsZXQgdGhldGEgPSBNYXRoLmF0YW4oKHpuICogYUIpIC8gcCk7XHJcbiAgbGV0IHN0ID0gTWF0aC5zaW4odGhldGEpO1xyXG4gIGxldCBjdCA9IE1hdGguY29zKHRoZXRhKTtcclxuICB0ID0gKHpuICsgZTIgKiBhQiAqIGEgKiBzdCAqIHN0ICogc3QpIC8gKHAgLSBlMiAqIGEgKiBjdCAqIGN0ICogY3QpO1xyXG4gIGxldCBCID0gTWF0aC5hdGFuKHQpO1xyXG4gIGxldCBMID0gMiAqIE1hdGguYXRhbih5biAvIChwICsgeG4pKTtcclxuICBoID0gTWF0aC5zcXJ0KDEgKyB0ICogdCkgKiAocCAtIGEgLyBNYXRoLnNxcnQoMSArICgxIC0gZTIpICogdCAqIHQpKTtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGp0c2tfeDogb3JpZ2luYWxYLFxyXG4gICAganRza195OiBvcmlnaW5hbFksXHJcbiAgICBsYXQ6IHJvdW5kVG9ORGVjaW1hbFBsYWNlcygoQiAvIE1hdGguUEkpICogMTgwLCA2KSxcclxuICAgIGxvbjogcm91bmRUb05EZWNpbWFsUGxhY2VzKChMIC8gTWF0aC5QSSkgKiAxODAsIDYpLFxyXG4gICAgYWx0aXR1ZGU6IE1hdGgucm91bmQoaCAqIDEwMCkgLyAxMDAsXHJcbiAgfTtcclxufVxyXG4iXX0=