2722 lines
		
	
	
		
			No EOL
		
	
	
		
			105 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			2722 lines
		
	
	
		
			No EOL
		
	
	
		
			105 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# Generated by Haxe 4.3.6
 | 
						|
# coding: utf-8
 | 
						|
import sys
 | 
						|
 | 
						|
import math as python_lib_Math
 | 
						|
import math as Math
 | 
						|
import inspect as python_lib_Inspect
 | 
						|
import re as python_lib_Re
 | 
						|
import sys as python_lib_Sys
 | 
						|
import functools as python_lib_Functools
 | 
						|
import traceback as python_lib_Traceback
 | 
						|
from io import StringIO as python_lib_io_StringIO
 | 
						|
import urllib.parse as python_lib_urllib_Parse
 | 
						|
 | 
						|
 | 
						|
class _hx_AnonObject:
 | 
						|
    _hx_disable_getattr = False
 | 
						|
    def __init__(self, fields):
 | 
						|
        self.__dict__ = fields
 | 
						|
    def __repr__(self):
 | 
						|
        return repr(self.__dict__)
 | 
						|
    def __contains__(self, item):
 | 
						|
        return item in self.__dict__
 | 
						|
    def __getitem__(self, item):
 | 
						|
        return self.__dict__[item]
 | 
						|
    def __getattr__(self, name):
 | 
						|
        if (self._hx_disable_getattr):
 | 
						|
            raise AttributeError('field does not exist')
 | 
						|
        else:
 | 
						|
            return None
 | 
						|
    def _hx_hasattr(self,field):
 | 
						|
        self._hx_disable_getattr = True
 | 
						|
        try:
 | 
						|
            getattr(self, field)
 | 
						|
            self._hx_disable_getattr = False
 | 
						|
            return True
 | 
						|
        except AttributeError:
 | 
						|
            self._hx_disable_getattr = False
 | 
						|
            return False
 | 
						|
 | 
						|
 | 
						|
 | 
						|
class Enum:
 | 
						|
    _hx_class_name = "Enum"
 | 
						|
    __slots__ = ("tag", "index", "params")
 | 
						|
    _hx_fields = ["tag", "index", "params"]
 | 
						|
    _hx_methods = ["__str__"]
 | 
						|
 | 
						|
    def __init__(self,tag,index,params):
 | 
						|
        self.tag = tag
 | 
						|
        self.index = index
 | 
						|
        self.params = params
 | 
						|
 | 
						|
    def __str__(self):
 | 
						|
        if (self.params is None):
 | 
						|
            return self.tag
 | 
						|
        else:
 | 
						|
            return self.tag + '(' + (', '.join(str(v) for v in self.params)) + ')'
 | 
						|
 | 
						|
Enum._hx_class = Enum
 | 
						|
 | 
						|
 | 
						|
class Class: pass
 | 
						|
 | 
						|
 | 
						|
class EReg:
 | 
						|
    _hx_class_name = "EReg"
 | 
						|
    __slots__ = ("pattern", "matchObj", "_hx_global")
 | 
						|
    _hx_fields = ["pattern", "matchObj", "global"]
 | 
						|
    _hx_methods = ["split", "replace"]
 | 
						|
 | 
						|
    def __init__(self,r,opt):
 | 
						|
        self.matchObj = None
 | 
						|
        self._hx_global = False
 | 
						|
        options = 0
 | 
						|
        _g = 0
 | 
						|
        _g1 = len(opt)
 | 
						|
        while (_g < _g1):
 | 
						|
            i = _g
 | 
						|
            _g = (_g + 1)
 | 
						|
            c = (-1 if ((i >= len(opt))) else ord(opt[i]))
 | 
						|
            if (c == 109):
 | 
						|
                options = (options | python_lib_Re.M)
 | 
						|
            if (c == 105):
 | 
						|
                options = (options | python_lib_Re.I)
 | 
						|
            if (c == 115):
 | 
						|
                options = (options | python_lib_Re.S)
 | 
						|
            if (c == 117):
 | 
						|
                options = (options | python_lib_Re.U)
 | 
						|
            if (c == 103):
 | 
						|
                self._hx_global = True
 | 
						|
        self.pattern = python_lib_Re.compile(r,options)
 | 
						|
 | 
						|
    def split(self,s):
 | 
						|
        if self._hx_global:
 | 
						|
            ret = []
 | 
						|
            lastEnd = 0
 | 
						|
            x = python_HaxeIterator(python_lib_Re.finditer(self.pattern,s))
 | 
						|
            while x.hasNext():
 | 
						|
                x1 = x.next()
 | 
						|
                x2 = HxString.substring(s,lastEnd,x1.start())
 | 
						|
                ret.append(x2)
 | 
						|
                lastEnd = x1.end()
 | 
						|
            x = HxString.substr(s,lastEnd,None)
 | 
						|
            ret.append(x)
 | 
						|
            return ret
 | 
						|
        else:
 | 
						|
            self.matchObj = python_lib_Re.search(self.pattern,s)
 | 
						|
            if (self.matchObj is None):
 | 
						|
                return [s]
 | 
						|
            else:
 | 
						|
                return [HxString.substring(s,0,self.matchObj.start()), HxString.substr(s,self.matchObj.end(),None)]
 | 
						|
 | 
						|
    def replace(self,s,by):
 | 
						|
        _this = by.split("$$")
 | 
						|
        by = "_hx_#repl#__".join([python_Boot.toString1(x1,'') for x1 in _this])
 | 
						|
        def _hx_local_0(x):
 | 
						|
            res = by
 | 
						|
            g = x.groups()
 | 
						|
            _g = 0
 | 
						|
            _g1 = len(g)
 | 
						|
            while (_g < _g1):
 | 
						|
                i = _g
 | 
						|
                _g = (_g + 1)
 | 
						|
                gs = g[i]
 | 
						|
                if (gs is None):
 | 
						|
                    continue
 | 
						|
                delimiter = ("$" + HxOverrides.stringOrNull(str((i + 1))))
 | 
						|
                _this = (list(res) if ((delimiter == "")) else res.split(delimiter))
 | 
						|
                res = gs.join([python_Boot.toString1(x1,'') for x1 in _this])
 | 
						|
            _this = res.split("_hx_#repl#__")
 | 
						|
            res = "$".join([python_Boot.toString1(x1,'') for x1 in _this])
 | 
						|
            return res
 | 
						|
        replace = _hx_local_0
 | 
						|
        return python_lib_Re.sub(self.pattern,replace,s,(0 if (self._hx_global) else 1))
 | 
						|
 | 
						|
EReg._hx_class = EReg
 | 
						|
 | 
						|
 | 
						|
class Reflect:
 | 
						|
    _hx_class_name = "Reflect"
 | 
						|
    __slots__ = ()
 | 
						|
    _hx_statics = ["field", "getProperty", "callMethod", "isObject", "deleteField", "copy"]
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def field(o,field):
 | 
						|
        return python_Boot.field(o,field)
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def getProperty(o,field):
 | 
						|
        if (o is None):
 | 
						|
            return None
 | 
						|
        if (field in python_Boot.keywords):
 | 
						|
            field = ("_hx_" + field)
 | 
						|
        elif ((((len(field) > 2) and ((ord(field[0]) == 95))) and ((ord(field[1]) == 95))) and ((ord(field[(len(field) - 1)]) != 95))):
 | 
						|
            field = ("_hx_" + field)
 | 
						|
        if isinstance(o,_hx_AnonObject):
 | 
						|
            return Reflect.field(o,field)
 | 
						|
        tmp = Reflect.field(o,("get_" + ("null" if field is None else field)))
 | 
						|
        if ((tmp is not None) and callable(tmp)):
 | 
						|
            return tmp()
 | 
						|
        else:
 | 
						|
            return Reflect.field(o,field)
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def callMethod(o,func,args):
 | 
						|
        if callable(func):
 | 
						|
            return func(*args)
 | 
						|
        else:
 | 
						|
            return None
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def isObject(v):
 | 
						|
        _g = Type.typeof(v)
 | 
						|
        tmp = _g.index
 | 
						|
        if (tmp == 4):
 | 
						|
            return True
 | 
						|
        elif (tmp == 6):
 | 
						|
            _g1 = _g.params[0]
 | 
						|
            return True
 | 
						|
        else:
 | 
						|
            return False
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def deleteField(o,field):
 | 
						|
        if (field in python_Boot.keywords):
 | 
						|
            field = ("_hx_" + field)
 | 
						|
        elif ((((len(field) > 2) and ((ord(field[0]) == 95))) and ((ord(field[1]) == 95))) and ((ord(field[(len(field) - 1)]) != 95))):
 | 
						|
            field = ("_hx_" + field)
 | 
						|
        if (not python_Boot.hasField(o,field)):
 | 
						|
            return False
 | 
						|
        o.__delattr__(field)
 | 
						|
        return True
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def copy(o):
 | 
						|
        if (o is None):
 | 
						|
            return None
 | 
						|
        o2 = _hx_AnonObject({})
 | 
						|
        _g = 0
 | 
						|
        _g1 = python_Boot.fields(o)
 | 
						|
        while (_g < len(_g1)):
 | 
						|
            f = (_g1[_g] if _g >= 0 and _g < len(_g1) else None)
 | 
						|
            _g = (_g + 1)
 | 
						|
            value = Reflect.field(o,f)
 | 
						|
            setattr(o2,(("_hx_" + f) if ((f in python_Boot.keywords)) else (("_hx_" + f) if (((((len(f) > 2) and ((ord(f[0]) == 95))) and ((ord(f[1]) == 95))) and ((ord(f[(len(f) - 1)]) != 95)))) else f)),value)
 | 
						|
        return o2
 | 
						|
Reflect._hx_class = Reflect
 | 
						|
 | 
						|
 | 
						|
class Std:
 | 
						|
    _hx_class_name = "Std"
 | 
						|
    __slots__ = ()
 | 
						|
    _hx_statics = ["isOfType", "string", "parseInt", "shortenPossibleNumber", "parseFloat"]
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def isOfType(v,t):
 | 
						|
        if ((v is None) and ((t is None))):
 | 
						|
            return False
 | 
						|
        if (t is None):
 | 
						|
            return False
 | 
						|
        if ((type(t) == type) and (t == Dynamic)):
 | 
						|
            return (v is not None)
 | 
						|
        isBool = isinstance(v,bool)
 | 
						|
        if (((type(t) == type) and (t == Bool)) and isBool):
 | 
						|
            return True
 | 
						|
        if ((((not isBool) and (not ((type(t) == type) and (t == Bool)))) and ((type(t) == type) and (t == Int))) and isinstance(v,int)):
 | 
						|
            return True
 | 
						|
        vIsFloat = isinstance(v,float)
 | 
						|
        tmp = None
 | 
						|
        tmp1 = None
 | 
						|
        if (((not isBool) and vIsFloat) and ((type(t) == type) and (t == Int))):
 | 
						|
            f = v
 | 
						|
            tmp1 = (((f != Math.POSITIVE_INFINITY) and ((f != Math.NEGATIVE_INFINITY))) and (not python_lib_Math.isnan(f)))
 | 
						|
        else:
 | 
						|
            tmp1 = False
 | 
						|
        if tmp1:
 | 
						|
            tmp1 = None
 | 
						|
            try:
 | 
						|
                tmp1 = int(v)
 | 
						|
            except BaseException as _g:
 | 
						|
                None
 | 
						|
                tmp1 = None
 | 
						|
            tmp = (v == tmp1)
 | 
						|
        else:
 | 
						|
            tmp = False
 | 
						|
        if ((tmp and ((v <= 2147483647))) and ((v >= -2147483648))):
 | 
						|
            return True
 | 
						|
        if (((not isBool) and ((type(t) == type) and (t == Float))) and isinstance(v,(float, int))):
 | 
						|
            return True
 | 
						|
        if ((type(t) == type) and (t == str)):
 | 
						|
            return isinstance(v,str)
 | 
						|
        isEnumType = ((type(t) == type) and (t == Enum))
 | 
						|
        if ((isEnumType and python_lib_Inspect.isclass(v)) and hasattr(v,"_hx_constructs")):
 | 
						|
            return True
 | 
						|
        if isEnumType:
 | 
						|
            return False
 | 
						|
        isClassType = ((type(t) == type) and (t == Class))
 | 
						|
        if ((((isClassType and (not isinstance(v,Enum))) and python_lib_Inspect.isclass(v)) and hasattr(v,"_hx_class_name")) and (not hasattr(v,"_hx_constructs"))):
 | 
						|
            return True
 | 
						|
        if isClassType:
 | 
						|
            return False
 | 
						|
        tmp = None
 | 
						|
        try:
 | 
						|
            tmp = isinstance(v,t)
 | 
						|
        except BaseException as _g:
 | 
						|
            None
 | 
						|
            tmp = False
 | 
						|
        if tmp:
 | 
						|
            return True
 | 
						|
        if python_lib_Inspect.isclass(t):
 | 
						|
            cls = t
 | 
						|
            loop = None
 | 
						|
            def _hx_local_1(intf):
 | 
						|
                f = (intf._hx_interfaces if (hasattr(intf,"_hx_interfaces")) else [])
 | 
						|
                if (f is not None):
 | 
						|
                    _g = 0
 | 
						|
                    while (_g < len(f)):
 | 
						|
                        i = (f[_g] if _g >= 0 and _g < len(f) else None)
 | 
						|
                        _g = (_g + 1)
 | 
						|
                        if (i == cls):
 | 
						|
                            return True
 | 
						|
                        else:
 | 
						|
                            l = loop(i)
 | 
						|
                            if l:
 | 
						|
                                return True
 | 
						|
                    return False
 | 
						|
                else:
 | 
						|
                    return False
 | 
						|
            loop = _hx_local_1
 | 
						|
            currentClass = v.__class__
 | 
						|
            result = False
 | 
						|
            while (currentClass is not None):
 | 
						|
                if loop(currentClass):
 | 
						|
                    result = True
 | 
						|
                    break
 | 
						|
                currentClass = python_Boot.getSuperClass(currentClass)
 | 
						|
            return result
 | 
						|
        else:
 | 
						|
            return False
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def string(s):
 | 
						|
        return python_Boot.toString1(s,"")
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def parseInt(x):
 | 
						|
        if (x is None):
 | 
						|
            return None
 | 
						|
        _hx_len = len(x)
 | 
						|
        index = 0
 | 
						|
        while (index < _hx_len):
 | 
						|
            if (not (x[index] in " \n\r\t\x0B\x0C")):
 | 
						|
                break
 | 
						|
            index = (index + 1)
 | 
						|
        isNegative = None
 | 
						|
        if (index < _hx_len):
 | 
						|
            sign = x[index]
 | 
						|
            if ((sign == "-") or ((sign == "+"))):
 | 
						|
                index = (index + 1)
 | 
						|
            isNegative = (sign == "-")
 | 
						|
        else:
 | 
						|
            isNegative = False
 | 
						|
        isHexadecimal = None
 | 
						|
        if ((index + 1) < _hx_len):
 | 
						|
            cur = x[index]
 | 
						|
            next = x[(index + 1)]
 | 
						|
            isHexadecimal = ((cur == "0") and (((next == "x") or ((next == "X")))))
 | 
						|
        else:
 | 
						|
            isHexadecimal = False
 | 
						|
        if isHexadecimal:
 | 
						|
            index = (index + 2)
 | 
						|
        cur = index
 | 
						|
        if isHexadecimal:
 | 
						|
            while (cur < _hx_len):
 | 
						|
                if (not (x[cur] in "0123456789abcdefABCDEF")):
 | 
						|
                    break
 | 
						|
                cur = (cur + 1)
 | 
						|
        else:
 | 
						|
            while (cur < _hx_len):
 | 
						|
                if (not (x[cur] in "0123456789")):
 | 
						|
                    break
 | 
						|
                cur = (cur + 1)
 | 
						|
        firstInvalidIndex = cur
 | 
						|
        if (index == firstInvalidIndex):
 | 
						|
            return None
 | 
						|
        result = int(HxString.substring(x,index,firstInvalidIndex),(16 if isHexadecimal else 10))
 | 
						|
        if isNegative:
 | 
						|
            return -result
 | 
						|
        else:
 | 
						|
            return result
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def shortenPossibleNumber(x):
 | 
						|
        r = ""
 | 
						|
        _g = 0
 | 
						|
        _g1 = len(x)
 | 
						|
        while (_g < _g1):
 | 
						|
            i = _g
 | 
						|
            _g = (_g + 1)
 | 
						|
            c = ("" if (((i < 0) or ((i >= len(x))))) else x[i])
 | 
						|
            _g2 = HxString.charCodeAt(c,0)
 | 
						|
            if (_g2 is None):
 | 
						|
                break
 | 
						|
            else:
 | 
						|
                _g3 = _g2
 | 
						|
                if (((((((((((_g3 == 57) or ((_g3 == 56))) or ((_g3 == 55))) or ((_g3 == 54))) or ((_g3 == 53))) or ((_g3 == 52))) or ((_g3 == 51))) or ((_g3 == 50))) or ((_g3 == 49))) or ((_g3 == 48))) or ((_g3 == 46))):
 | 
						|
                    r = (("null" if r is None else r) + ("null" if c is None else c))
 | 
						|
                else:
 | 
						|
                    break
 | 
						|
        return r
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def parseFloat(x):
 | 
						|
        try:
 | 
						|
            return float(x)
 | 
						|
        except BaseException as _g:
 | 
						|
            None
 | 
						|
            if (x is not None):
 | 
						|
                r1 = Std.shortenPossibleNumber(x)
 | 
						|
                if (r1 != x):
 | 
						|
                    return Std.parseFloat(r1)
 | 
						|
            return Math.NaN
 | 
						|
Std._hx_class = Std
 | 
						|
 | 
						|
 | 
						|
class Float: pass
 | 
						|
 | 
						|
 | 
						|
class Int: pass
 | 
						|
 | 
						|
 | 
						|
class Bool: pass
 | 
						|
 | 
						|
 | 
						|
class Dynamic: pass
 | 
						|
 | 
						|
 | 
						|
class StringBuf:
 | 
						|
    _hx_class_name = "StringBuf"
 | 
						|
    __slots__ = ("b",)
 | 
						|
    _hx_fields = ["b"]
 | 
						|
 | 
						|
    def __init__(self):
 | 
						|
        self.b = python_lib_io_StringIO()
 | 
						|
 | 
						|
StringBuf._hx_class = StringBuf
 | 
						|
 | 
						|
 | 
						|
class StringTools:
 | 
						|
    _hx_class_name = "StringTools"
 | 
						|
    __slots__ = ()
 | 
						|
    _hx_statics = ["isSpace", "ltrim", "rtrim", "trim", "replace"]
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def isSpace(s,pos):
 | 
						|
        if (((len(s) == 0) or ((pos < 0))) or ((pos >= len(s)))):
 | 
						|
            return False
 | 
						|
        c = HxString.charCodeAt(s,pos)
 | 
						|
        if (not (((c > 8) and ((c < 14))))):
 | 
						|
            return (c == 32)
 | 
						|
        else:
 | 
						|
            return True
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def ltrim(s):
 | 
						|
        l = len(s)
 | 
						|
        r = 0
 | 
						|
        while ((r < l) and StringTools.isSpace(s,r)):
 | 
						|
            r = (r + 1)
 | 
						|
        if (r > 0):
 | 
						|
            return HxString.substr(s,r,(l - r))
 | 
						|
        else:
 | 
						|
            return s
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def rtrim(s):
 | 
						|
        l = len(s)
 | 
						|
        r = 0
 | 
						|
        while ((r < l) and StringTools.isSpace(s,((l - r) - 1))):
 | 
						|
            r = (r + 1)
 | 
						|
        if (r > 0):
 | 
						|
            return HxString.substr(s,0,(l - r))
 | 
						|
        else:
 | 
						|
            return s
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def trim(s):
 | 
						|
        return StringTools.ltrim(StringTools.rtrim(s))
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def replace(s,sub,by):
 | 
						|
        _this = (list(s) if ((sub == "")) else s.split(sub))
 | 
						|
        return by.join([python_Boot.toString1(x1,'') for x1 in _this])
 | 
						|
StringTools._hx_class = StringTools
 | 
						|
 | 
						|
class ValueType(Enum):
 | 
						|
    __slots__ = ()
 | 
						|
    _hx_class_name = "ValueType"
 | 
						|
    _hx_constructs = ["TNull", "TInt", "TFloat", "TBool", "TObject", "TFunction", "TClass", "TEnum", "TUnknown"]
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def TClass(c):
 | 
						|
        return ValueType("TClass", 6, (c,))
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def TEnum(e):
 | 
						|
        return ValueType("TEnum", 7, (e,))
 | 
						|
ValueType.TNull = ValueType("TNull", 0, ())
 | 
						|
ValueType.TInt = ValueType("TInt", 1, ())
 | 
						|
ValueType.TFloat = ValueType("TFloat", 2, ())
 | 
						|
ValueType.TBool = ValueType("TBool", 3, ())
 | 
						|
ValueType.TObject = ValueType("TObject", 4, ())
 | 
						|
ValueType.TFunction = ValueType("TFunction", 5, ())
 | 
						|
ValueType.TUnknown = ValueType("TUnknown", 8, ())
 | 
						|
ValueType._hx_class = ValueType
 | 
						|
 | 
						|
 | 
						|
class Type:
 | 
						|
    _hx_class_name = "Type"
 | 
						|
    __slots__ = ()
 | 
						|
    _hx_statics = ["typeof"]
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def typeof(v):
 | 
						|
        if (v is None):
 | 
						|
            return ValueType.TNull
 | 
						|
        elif isinstance(v,bool):
 | 
						|
            return ValueType.TBool
 | 
						|
        elif isinstance(v,int):
 | 
						|
            return ValueType.TInt
 | 
						|
        elif isinstance(v,float):
 | 
						|
            return ValueType.TFloat
 | 
						|
        elif isinstance(v,str):
 | 
						|
            return ValueType.TClass(str)
 | 
						|
        elif isinstance(v,list):
 | 
						|
            return ValueType.TClass(list)
 | 
						|
        elif (isinstance(v,_hx_AnonObject) or python_lib_Inspect.isclass(v)):
 | 
						|
            return ValueType.TObject
 | 
						|
        elif isinstance(v,Enum):
 | 
						|
            return ValueType.TEnum(v.__class__)
 | 
						|
        elif (isinstance(v,type) or hasattr(v,"_hx_class")):
 | 
						|
            return ValueType.TClass(v.__class__)
 | 
						|
        elif callable(v):
 | 
						|
            return ValueType.TFunction
 | 
						|
        else:
 | 
						|
            return ValueType.TUnknown
 | 
						|
Type._hx_class = Type
 | 
						|
 | 
						|
 | 
						|
class haxe_IMap:
 | 
						|
    _hx_class_name = "haxe.IMap"
 | 
						|
    __slots__ = ()
 | 
						|
haxe_IMap._hx_class = haxe_IMap
 | 
						|
 | 
						|
 | 
						|
class haxe_Exception(Exception):
 | 
						|
    _hx_class_name = "haxe.Exception"
 | 
						|
    __slots__ = ("_hx___nativeStack", "_hx___skipStack", "_hx___nativeException", "_hx___previousException")
 | 
						|
    _hx_fields = ["__nativeStack", "__skipStack", "__nativeException", "__previousException"]
 | 
						|
    _hx_methods = ["unwrap", "get_native"]
 | 
						|
    _hx_statics = ["caught", "thrown"]
 | 
						|
    _hx_interfaces = []
 | 
						|
    _hx_super = Exception
 | 
						|
 | 
						|
 | 
						|
    def __init__(self,message,previous = None,native = None):
 | 
						|
        self._hx___previousException = None
 | 
						|
        self._hx___nativeException = None
 | 
						|
        self._hx___nativeStack = None
 | 
						|
        self._hx___skipStack = 0
 | 
						|
        super().__init__(message)
 | 
						|
        self._hx___previousException = previous
 | 
						|
        if ((native is not None) and Std.isOfType(native,BaseException)):
 | 
						|
            self._hx___nativeException = native
 | 
						|
            self._hx___nativeStack = haxe_NativeStackTrace.exceptionStack()
 | 
						|
        else:
 | 
						|
            self._hx___nativeException = self
 | 
						|
            infos = python_lib_Traceback.extract_stack()
 | 
						|
            if (len(infos) != 0):
 | 
						|
                infos.pop()
 | 
						|
            infos.reverse()
 | 
						|
            self._hx___nativeStack = infos
 | 
						|
 | 
						|
    def unwrap(self):
 | 
						|
        return self._hx___nativeException
 | 
						|
 | 
						|
    def get_native(self):
 | 
						|
        return self._hx___nativeException
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def caught(value):
 | 
						|
        if Std.isOfType(value,haxe_Exception):
 | 
						|
            return value
 | 
						|
        elif Std.isOfType(value,BaseException):
 | 
						|
            return haxe_Exception(str(value),None,value)
 | 
						|
        else:
 | 
						|
            return haxe_ValueException(value,None,value)
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def thrown(value):
 | 
						|
        if Std.isOfType(value,haxe_Exception):
 | 
						|
            return value.get_native()
 | 
						|
        elif Std.isOfType(value,BaseException):
 | 
						|
            return value
 | 
						|
        else:
 | 
						|
            e = haxe_ValueException(value)
 | 
						|
            e._hx___skipStack = (e._hx___skipStack + 1)
 | 
						|
            return e
 | 
						|
 | 
						|
haxe_Exception._hx_class = haxe_Exception
 | 
						|
 | 
						|
 | 
						|
class haxe_NativeStackTrace:
 | 
						|
    _hx_class_name = "haxe.NativeStackTrace"
 | 
						|
    __slots__ = ()
 | 
						|
    _hx_statics = ["saveStack", "exceptionStack"]
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def saveStack(exception):
 | 
						|
        pass
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def exceptionStack():
 | 
						|
        exc = python_lib_Sys.exc_info()
 | 
						|
        if (exc[2] is not None):
 | 
						|
            infos = python_lib_Traceback.extract_tb(exc[2])
 | 
						|
            infos.reverse()
 | 
						|
            return infos
 | 
						|
        else:
 | 
						|
            return []
 | 
						|
haxe_NativeStackTrace._hx_class = haxe_NativeStackTrace
 | 
						|
 | 
						|
class haxe__Template_TemplateExpr(Enum):
 | 
						|
    __slots__ = ()
 | 
						|
    _hx_class_name = "haxe._Template.TemplateExpr"
 | 
						|
    _hx_constructs = ["OpVar", "OpExpr", "OpIf", "OpStr", "OpBlock", "OpForeach", "OpMacro"]
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def OpVar(v):
 | 
						|
        return haxe__Template_TemplateExpr("OpVar", 0, (v,))
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def OpExpr(expr):
 | 
						|
        return haxe__Template_TemplateExpr("OpExpr", 1, (expr,))
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def OpIf(expr,eif,eelse):
 | 
						|
        return haxe__Template_TemplateExpr("OpIf", 2, (expr,eif,eelse))
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def OpStr(str):
 | 
						|
        return haxe__Template_TemplateExpr("OpStr", 3, (str,))
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def OpBlock(l):
 | 
						|
        return haxe__Template_TemplateExpr("OpBlock", 4, (l,))
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def OpForeach(expr,loop):
 | 
						|
        return haxe__Template_TemplateExpr("OpForeach", 5, (expr,loop))
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def OpMacro(name,params):
 | 
						|
        return haxe__Template_TemplateExpr("OpMacro", 6, (name,params))
 | 
						|
haxe__Template_TemplateExpr._hx_class = haxe__Template_TemplateExpr
 | 
						|
 | 
						|
 | 
						|
class haxe_iterators_ArrayIterator:
 | 
						|
    _hx_class_name = "haxe.iterators.ArrayIterator"
 | 
						|
    __slots__ = ("array", "current")
 | 
						|
    _hx_fields = ["array", "current"]
 | 
						|
    _hx_methods = ["hasNext", "next"]
 | 
						|
 | 
						|
    def __init__(self,array):
 | 
						|
        self.current = 0
 | 
						|
        self.array = array
 | 
						|
 | 
						|
    def hasNext(self):
 | 
						|
        return (self.current < len(self.array))
 | 
						|
 | 
						|
    def next(self):
 | 
						|
        def _hx_local_3():
 | 
						|
            def _hx_local_2():
 | 
						|
                _hx_local_0 = self
 | 
						|
                _hx_local_1 = _hx_local_0.current
 | 
						|
                _hx_local_0.current = (_hx_local_1 + 1)
 | 
						|
                return _hx_local_1
 | 
						|
            return python_internal_ArrayImpl._get(self.array, _hx_local_2())
 | 
						|
        return _hx_local_3()
 | 
						|
 | 
						|
haxe_iterators_ArrayIterator._hx_class = haxe_iterators_ArrayIterator
 | 
						|
 | 
						|
 | 
						|
class haxe_Template:
 | 
						|
    _hx_class_name = "haxe.Template"
 | 
						|
    __slots__ = ("expr", "context", "macros", "stack", "buf")
 | 
						|
    _hx_fields = ["expr", "context", "macros", "stack", "buf"]
 | 
						|
    _hx_methods = ["execute", "resolve", "parseTokens", "parseBlock", "parse", "parseExpr", "makeConst", "makePath", "makeExpr", "skipSpaces", "makeExpr2", "run"]
 | 
						|
    _hx_statics = ["splitter", "expr_splitter", "expr_trim", "expr_int", "expr_float", "globals", "hxKeepArrayIterator"]
 | 
						|
 | 
						|
    def __init__(self,_hx_str):
 | 
						|
        self.buf = None
 | 
						|
        self.stack = None
 | 
						|
        self.macros = None
 | 
						|
        self.context = None
 | 
						|
        self.expr = None
 | 
						|
        tokens = self.parseTokens(_hx_str)
 | 
						|
        self.expr = self.parseBlock(tokens)
 | 
						|
        if (not tokens.isEmpty()):
 | 
						|
            raise haxe_Exception.thrown((("Unexpected '" + Std.string(tokens.first().s)) + "'"))
 | 
						|
 | 
						|
    def execute(self,context,macros = None):
 | 
						|
        self.macros = (_hx_AnonObject({}) if ((macros is None)) else macros)
 | 
						|
        self.context = context
 | 
						|
        self.stack = haxe_ds_List()
 | 
						|
        self.buf = StringBuf()
 | 
						|
        self.run(self.expr)
 | 
						|
        return self.buf.b.getvalue()
 | 
						|
 | 
						|
    def resolve(self,v):
 | 
						|
        if (v == "__current__"):
 | 
						|
            return self.context
 | 
						|
        if Reflect.isObject(self.context):
 | 
						|
            value = Reflect.getProperty(self.context,v)
 | 
						|
            if ((value is not None) or python_Boot.hasField(self.context,v)):
 | 
						|
                return value
 | 
						|
        _g_head = self.stack.h
 | 
						|
        while (_g_head is not None):
 | 
						|
            val = _g_head.item
 | 
						|
            _g_head = _g_head.next
 | 
						|
            ctx = val
 | 
						|
            value = Reflect.getProperty(ctx,v)
 | 
						|
            if ((value is not None) or python_Boot.hasField(ctx,v)):
 | 
						|
                return value
 | 
						|
        return Reflect.field(haxe_Template.globals,v)
 | 
						|
 | 
						|
    def parseTokens(self,data):
 | 
						|
        tokens = haxe_ds_List()
 | 
						|
        while True:
 | 
						|
            _this = haxe_Template.splitter
 | 
						|
            _this.matchObj = python_lib_Re.search(_this.pattern,data)
 | 
						|
            if (not ((_this.matchObj is not None))):
 | 
						|
                break
 | 
						|
            _this1 = haxe_Template.splitter
 | 
						|
            p_pos = _this1.matchObj.start()
 | 
						|
            p_len = (_this1.matchObj.end() - _this1.matchObj.start())
 | 
						|
            if (p_pos > 0):
 | 
						|
                tokens.add(_hx_AnonObject({'p': HxString.substr(data,0,p_pos), 's': True, 'l': None}))
 | 
						|
            if (HxString.charCodeAt(data,p_pos) == 58):
 | 
						|
                tokens.add(_hx_AnonObject({'p': HxString.substr(data,(p_pos + 2),(p_len - 4)), 's': False, 'l': None}))
 | 
						|
                _this2 = haxe_Template.splitter
 | 
						|
                data = HxString.substr(_this2.matchObj.string,_this2.matchObj.end(),None)
 | 
						|
                continue
 | 
						|
            parp = (p_pos + p_len)
 | 
						|
            npar = 1
 | 
						|
            params = []
 | 
						|
            part = ""
 | 
						|
            while True:
 | 
						|
                c = HxString.charCodeAt(data,parp)
 | 
						|
                parp = (parp + 1)
 | 
						|
                if (c == 40):
 | 
						|
                    npar = (npar + 1)
 | 
						|
                elif (c == 41):
 | 
						|
                    npar = (npar - 1)
 | 
						|
                    if (npar <= 0):
 | 
						|
                        break
 | 
						|
                elif (c is None):
 | 
						|
                    raise haxe_Exception.thrown("Unclosed macro parenthesis")
 | 
						|
                if ((c == 44) and ((npar == 1))):
 | 
						|
                    params.append(part)
 | 
						|
                    part = ""
 | 
						|
                else:
 | 
						|
                    part = (("null" if part is None else part) + HxOverrides.stringOrNull("".join(map(chr,[c]))))
 | 
						|
            params.append(part)
 | 
						|
            tokens.add(_hx_AnonObject({'p': haxe_Template.splitter.matchObj.group(2), 's': False, 'l': params}))
 | 
						|
            data = HxString.substr(data,parp,(len(data) - parp))
 | 
						|
        if (len(data) > 0):
 | 
						|
            tokens.add(_hx_AnonObject({'p': data, 's': True, 'l': None}))
 | 
						|
        return tokens
 | 
						|
 | 
						|
    def parseBlock(self,tokens):
 | 
						|
        l = haxe_ds_List()
 | 
						|
        while True:
 | 
						|
            t = tokens.first()
 | 
						|
            if (t is None):
 | 
						|
                break
 | 
						|
            if ((not t.s) and ((((t.p == "end") or ((t.p == "else"))) or ((HxString.substr(t.p,0,7) == "elseif "))))):
 | 
						|
                break
 | 
						|
            l.add(self.parse(tokens))
 | 
						|
        if (l.length == 1):
 | 
						|
            return l.first()
 | 
						|
        return haxe__Template_TemplateExpr.OpBlock(l)
 | 
						|
 | 
						|
    def parse(self,tokens):
 | 
						|
        t = tokens.pop()
 | 
						|
        p = t.p
 | 
						|
        if t.s:
 | 
						|
            return haxe__Template_TemplateExpr.OpStr(p)
 | 
						|
        if (t.l is not None):
 | 
						|
            pe = haxe_ds_List()
 | 
						|
            _g = 0
 | 
						|
            _g1 = t.l
 | 
						|
            while (_g < len(_g1)):
 | 
						|
                p1 = (_g1[_g] if _g >= 0 and _g < len(_g1) else None)
 | 
						|
                _g = (_g + 1)
 | 
						|
                pe.add(self.parseBlock(self.parseTokens(p1)))
 | 
						|
            return haxe__Template_TemplateExpr.OpMacro(p,pe)
 | 
						|
        def _hx_local_2(kwd):
 | 
						|
            pos = -1
 | 
						|
            length = len(kwd)
 | 
						|
            if (HxString.substr(p,0,length) == kwd):
 | 
						|
                pos = length
 | 
						|
                _g_offset = 0
 | 
						|
                _g_s = HxString.substr(p,length,None)
 | 
						|
                while (_g_offset < len(_g_s)):
 | 
						|
                    index = _g_offset
 | 
						|
                    _g_offset = (_g_offset + 1)
 | 
						|
                    c = ord(_g_s[index])
 | 
						|
                    if (c == 32):
 | 
						|
                        pos = (pos + 1)
 | 
						|
                    else:
 | 
						|
                        break
 | 
						|
            return pos
 | 
						|
        kwdEnd = _hx_local_2
 | 
						|
        pos = kwdEnd("if")
 | 
						|
        if (pos > 0):
 | 
						|
            p = HxString.substr(p,pos,(len(p) - pos))
 | 
						|
            e = self.parseExpr(p)
 | 
						|
            eif = self.parseBlock(tokens)
 | 
						|
            t = tokens.first()
 | 
						|
            eelse = None
 | 
						|
            if (t is None):
 | 
						|
                raise haxe_Exception.thrown("Unclosed 'if'")
 | 
						|
            if (t.p == "end"):
 | 
						|
                tokens.pop()
 | 
						|
                eelse = None
 | 
						|
            elif (t.p == "else"):
 | 
						|
                tokens.pop()
 | 
						|
                eelse = self.parseBlock(tokens)
 | 
						|
                t = tokens.pop()
 | 
						|
                if ((t is None) or ((t.p != "end"))):
 | 
						|
                    raise haxe_Exception.thrown("Unclosed 'else'")
 | 
						|
            else:
 | 
						|
                t.p = HxString.substr(t.p,4,(len(t.p) - 4))
 | 
						|
                eelse = self.parse(tokens)
 | 
						|
            return haxe__Template_TemplateExpr.OpIf(e,eif,eelse)
 | 
						|
        pos = kwdEnd("foreach")
 | 
						|
        if (pos >= 0):
 | 
						|
            p = HxString.substr(p,pos,(len(p) - pos))
 | 
						|
            e = self.parseExpr(p)
 | 
						|
            efor = self.parseBlock(tokens)
 | 
						|
            t = tokens.pop()
 | 
						|
            if ((t is None) or ((t.p != "end"))):
 | 
						|
                raise haxe_Exception.thrown("Unclosed 'foreach'")
 | 
						|
            return haxe__Template_TemplateExpr.OpForeach(e,efor)
 | 
						|
        _this = haxe_Template.expr_splitter
 | 
						|
        _this.matchObj = python_lib_Re.search(_this.pattern,p)
 | 
						|
        if (_this.matchObj is not None):
 | 
						|
            return haxe__Template_TemplateExpr.OpExpr(self.parseExpr(p))
 | 
						|
        return haxe__Template_TemplateExpr.OpVar(p)
 | 
						|
 | 
						|
    def parseExpr(self,data):
 | 
						|
        l = haxe_ds_List()
 | 
						|
        expr = data
 | 
						|
        while True:
 | 
						|
            _this = haxe_Template.expr_splitter
 | 
						|
            _this.matchObj = python_lib_Re.search(_this.pattern,data)
 | 
						|
            if (not ((_this.matchObj is not None))):
 | 
						|
                break
 | 
						|
            _this1 = haxe_Template.expr_splitter
 | 
						|
            p_pos = _this1.matchObj.start()
 | 
						|
            p_len = (_this1.matchObj.end() - _this1.matchObj.start())
 | 
						|
            k = (p_pos + p_len)
 | 
						|
            if (p_pos != 0):
 | 
						|
                l.add(_hx_AnonObject({'p': HxString.substr(data,0,p_pos), 's': True}))
 | 
						|
            p = haxe_Template.expr_splitter.matchObj.group(0)
 | 
						|
            startIndex = None
 | 
						|
            l.add(_hx_AnonObject({'p': p, 's': (((p.find("\"") if ((startIndex is None)) else HxString.indexOfImpl(p,"\"",startIndex))) >= 0)}))
 | 
						|
            _this2 = haxe_Template.expr_splitter
 | 
						|
            data = HxString.substr(_this2.matchObj.string,_this2.matchObj.end(),None)
 | 
						|
        if (len(data) != 0):
 | 
						|
            _g_offset = 0
 | 
						|
            _g_s = data
 | 
						|
            while (_g_offset < len(_g_s)):
 | 
						|
                _g_key = _g_offset
 | 
						|
                s = _g_s
 | 
						|
                index = _g_offset
 | 
						|
                _g_offset = (_g_offset + 1)
 | 
						|
                _g_value = (-1 if ((index >= len(s))) else ord(s[index]))
 | 
						|
                i = _g_key
 | 
						|
                c = _g_value
 | 
						|
                if (c != 32):
 | 
						|
                    l.add(_hx_AnonObject({'p': HxString.substr(data,i,None), 's': True}))
 | 
						|
                    break
 | 
						|
        e = None
 | 
						|
        try:
 | 
						|
            e = self.makeExpr(l)
 | 
						|
            if (not l.isEmpty()):
 | 
						|
                raise haxe_Exception.thrown(l.first().p)
 | 
						|
        except BaseException as _g:
 | 
						|
            None
 | 
						|
            _g1 = haxe_Exception.caught(_g).unwrap()
 | 
						|
            if Std.isOfType(_g1,str):
 | 
						|
                s = _g1
 | 
						|
                raise haxe_Exception.thrown(((("Unexpected '" + ("null" if s is None else s)) + "' in ") + ("null" if expr is None else expr)))
 | 
						|
            else:
 | 
						|
                raise _g
 | 
						|
        def _hx_local_0():
 | 
						|
            try:
 | 
						|
                return e()
 | 
						|
            except BaseException as _g:
 | 
						|
                None
 | 
						|
                exc = haxe_Exception.caught(_g).unwrap()
 | 
						|
                raise haxe_Exception.thrown(((("Error : " + Std.string(exc)) + " in ") + ("null" if expr is None else expr)))
 | 
						|
        return _hx_local_0
 | 
						|
 | 
						|
    def makeConst(self,v):
 | 
						|
        _this = haxe_Template.expr_trim
 | 
						|
        _this.matchObj = python_lib_Re.search(_this.pattern,v)
 | 
						|
        v = haxe_Template.expr_trim.matchObj.group(1)
 | 
						|
        if (HxString.charCodeAt(v,0) == 34):
 | 
						|
            _hx_str = HxString.substr(v,1,(len(v) - 2))
 | 
						|
            def _hx_local_0():
 | 
						|
                return _hx_str
 | 
						|
            return _hx_local_0
 | 
						|
        _this = haxe_Template.expr_int
 | 
						|
        _this.matchObj = python_lib_Re.search(_this.pattern,v)
 | 
						|
        if (_this.matchObj is not None):
 | 
						|
            i = Std.parseInt(v)
 | 
						|
            def _hx_local_1():
 | 
						|
                return i
 | 
						|
            return _hx_local_1
 | 
						|
        _this = haxe_Template.expr_float
 | 
						|
        _this.matchObj = python_lib_Re.search(_this.pattern,v)
 | 
						|
        if (_this.matchObj is not None):
 | 
						|
            f = Std.parseFloat(v)
 | 
						|
            def _hx_local_2():
 | 
						|
                return f
 | 
						|
            return _hx_local_2
 | 
						|
        me = self
 | 
						|
        def _hx_local_3():
 | 
						|
            return me.resolve(v)
 | 
						|
        return _hx_local_3
 | 
						|
 | 
						|
    def makePath(self,e,l):
 | 
						|
        p = l.first()
 | 
						|
        if ((p is None) or ((p.p != "."))):
 | 
						|
            return e
 | 
						|
        l.pop()
 | 
						|
        field = l.pop()
 | 
						|
        if ((field is None) or (not field.s)):
 | 
						|
            raise haxe_Exception.thrown(field.p)
 | 
						|
        f = field.p
 | 
						|
        _this = haxe_Template.expr_trim
 | 
						|
        _this.matchObj = python_lib_Re.search(_this.pattern,f)
 | 
						|
        f = haxe_Template.expr_trim.matchObj.group(1)
 | 
						|
        def _hx_local_1():
 | 
						|
            def _hx_local_0():
 | 
						|
                return Reflect.field(e(),f)
 | 
						|
            return self.makePath(_hx_local_0,l)
 | 
						|
        return _hx_local_1()
 | 
						|
 | 
						|
    def makeExpr(self,l):
 | 
						|
        return self.makePath(self.makeExpr2(l),l)
 | 
						|
 | 
						|
    def skipSpaces(self,l):
 | 
						|
        p = l.first()
 | 
						|
        while (p is not None):
 | 
						|
            _g_offset = 0
 | 
						|
            _g_s = p.p
 | 
						|
            while (_g_offset < len(_g_s)):
 | 
						|
                index = _g_offset
 | 
						|
                _g_offset = (_g_offset + 1)
 | 
						|
                c = ord(_g_s[index])
 | 
						|
                if (c != 32):
 | 
						|
                    return
 | 
						|
            l.pop()
 | 
						|
            p = l.first()
 | 
						|
 | 
						|
    def makeExpr2(self,l):
 | 
						|
        self.skipSpaces(l)
 | 
						|
        p = l.pop()
 | 
						|
        self.skipSpaces(l)
 | 
						|
        if (p is None):
 | 
						|
            raise haxe_Exception.thrown("<eof>")
 | 
						|
        if p.s:
 | 
						|
            return self.makeConst(p.p)
 | 
						|
        _g = p.p
 | 
						|
        if (_g == "!"):
 | 
						|
            e = self.makeExpr(l)
 | 
						|
            def _hx_local_0():
 | 
						|
                v = e()
 | 
						|
                if (v is not None):
 | 
						|
                    return (v == False)
 | 
						|
                else:
 | 
						|
                    return True
 | 
						|
            return _hx_local_0
 | 
						|
        elif (_g == "("):
 | 
						|
            self.skipSpaces(l)
 | 
						|
            e1 = self.makeExpr(l)
 | 
						|
            self.skipSpaces(l)
 | 
						|
            p1 = l.pop()
 | 
						|
            if ((p1 is None) or p1.s):
 | 
						|
                raise haxe_Exception.thrown(p1)
 | 
						|
            if (p1.p == ")"):
 | 
						|
                return e1
 | 
						|
            self.skipSpaces(l)
 | 
						|
            e2 = self.makeExpr(l)
 | 
						|
            self.skipSpaces(l)
 | 
						|
            p2 = l.pop()
 | 
						|
            self.skipSpaces(l)
 | 
						|
            if ((p2 is None) or ((p2.p != ")"))):
 | 
						|
                raise haxe_Exception.thrown(p2)
 | 
						|
            _g = p1.p
 | 
						|
            _hx_local_1 = len(_g)
 | 
						|
            if (_hx_local_1 == 1):
 | 
						|
                if (_g == "*"):
 | 
						|
                    def _hx_local_2():
 | 
						|
                        return (e1() * e2())
 | 
						|
                    return _hx_local_2
 | 
						|
                elif (_g == "+"):
 | 
						|
                    def _hx_local_3():
 | 
						|
                        return python_Boot._add_dynamic(e1(),e2())
 | 
						|
                    return _hx_local_3
 | 
						|
                elif (_g == "-"):
 | 
						|
                    def _hx_local_4():
 | 
						|
                        return (e1() - e2())
 | 
						|
                    return _hx_local_4
 | 
						|
                elif (_g == "/"):
 | 
						|
                    def _hx_local_5():
 | 
						|
                        return (e1() / e2())
 | 
						|
                    return _hx_local_5
 | 
						|
                elif (_g == "<"):
 | 
						|
                    def _hx_local_6():
 | 
						|
                        return (e1() < e2())
 | 
						|
                    return _hx_local_6
 | 
						|
                elif (_g == ">"):
 | 
						|
                    def _hx_local_7():
 | 
						|
                        return (e1() > e2())
 | 
						|
                    return _hx_local_7
 | 
						|
                else:
 | 
						|
                    raise haxe_Exception.thrown(("Unknown operation " + HxOverrides.stringOrNull(p1.p)))
 | 
						|
            elif (_hx_local_1 == 2):
 | 
						|
                if (_g == "!="):
 | 
						|
                    def _hx_local_8():
 | 
						|
                        return not HxOverrides.eq(e1(),e2())
 | 
						|
                    return _hx_local_8
 | 
						|
                elif (_g == "&&"):
 | 
						|
                    def _hx_local_9():
 | 
						|
                        return (e1() and e2())
 | 
						|
                    return _hx_local_9
 | 
						|
                elif (_g == "<="):
 | 
						|
                    def _hx_local_10():
 | 
						|
                        return (e1() <= e2())
 | 
						|
                    return _hx_local_10
 | 
						|
                elif (_g == "=="):
 | 
						|
                    def _hx_local_11():
 | 
						|
                        return HxOverrides.eq(e1(),e2())
 | 
						|
                    return _hx_local_11
 | 
						|
                elif (_g == ">="):
 | 
						|
                    def _hx_local_12():
 | 
						|
                        return (e1() >= e2())
 | 
						|
                    return _hx_local_12
 | 
						|
                elif (_g == "||"):
 | 
						|
                    def _hx_local_13():
 | 
						|
                        return (e1() or e2())
 | 
						|
                    return _hx_local_13
 | 
						|
                else:
 | 
						|
                    raise haxe_Exception.thrown(("Unknown operation " + HxOverrides.stringOrNull(p1.p)))
 | 
						|
            else:
 | 
						|
                raise haxe_Exception.thrown(("Unknown operation " + HxOverrides.stringOrNull(p1.p)))
 | 
						|
        elif (_g == "-"):
 | 
						|
            e3 = self.makeExpr(l)
 | 
						|
            def _hx_local_14():
 | 
						|
                return -e3()
 | 
						|
            return _hx_local_14
 | 
						|
        else:
 | 
						|
            pass
 | 
						|
        raise haxe_Exception.thrown(p.p)
 | 
						|
 | 
						|
    def run(self,e):
 | 
						|
        tmp = e.index
 | 
						|
        if (tmp == 0):
 | 
						|
            v = e.params[0]
 | 
						|
            _this = self.buf
 | 
						|
            s = Std.string(Std.string(self.resolve(v)))
 | 
						|
            _this.b.write(s)
 | 
						|
        elif (tmp == 1):
 | 
						|
            e1 = e.params[0]
 | 
						|
            _this = self.buf
 | 
						|
            s = Std.string(Std.string(e1()))
 | 
						|
            _this.b.write(s)
 | 
						|
        elif (tmp == 2):
 | 
						|
            e1 = e.params[0]
 | 
						|
            eif = e.params[1]
 | 
						|
            eelse = e.params[2]
 | 
						|
            v = e1()
 | 
						|
            if ((v is None) or ((v == False))):
 | 
						|
                if (eelse is not None):
 | 
						|
                    self.run(eelse)
 | 
						|
            else:
 | 
						|
                self.run(eif)
 | 
						|
        elif (tmp == 3):
 | 
						|
            _hx_str = e.params[0]
 | 
						|
            _this = self.buf
 | 
						|
            s = Std.string(_hx_str)
 | 
						|
            _this.b.write(s)
 | 
						|
        elif (tmp == 4):
 | 
						|
            l = e.params[0]
 | 
						|
            _g_head = l.h
 | 
						|
            while (_g_head is not None):
 | 
						|
                val = _g_head.item
 | 
						|
                _g_head = _g_head.next
 | 
						|
                e1 = val
 | 
						|
                self.run(e1)
 | 
						|
        elif (tmp == 5):
 | 
						|
            e1 = e.params[0]
 | 
						|
            loop = e.params[1]
 | 
						|
            v = e1()
 | 
						|
            try:
 | 
						|
                x = Reflect.field(v,"iterator")()
 | 
						|
                if (Reflect.field(x,"hasNext") is None):
 | 
						|
                    raise haxe_Exception.thrown(None)
 | 
						|
                v = x
 | 
						|
            except BaseException as _g:
 | 
						|
                None
 | 
						|
                try:
 | 
						|
                    if (Reflect.field(v,"hasNext") is None):
 | 
						|
                        raise haxe_Exception.thrown(None)
 | 
						|
                except BaseException as _g:
 | 
						|
                    raise haxe_Exception.thrown(("Cannot iter on " + Std.string(v)))
 | 
						|
            self.stack.push(self.context)
 | 
						|
            v1 = v
 | 
						|
            ctx = v1
 | 
						|
            while ctx.hasNext():
 | 
						|
                ctx1 = ctx.next()
 | 
						|
                self.context = ctx1
 | 
						|
                self.run(loop)
 | 
						|
            self.context = self.stack.pop()
 | 
						|
        elif (tmp == 6):
 | 
						|
            m = e.params[0]
 | 
						|
            params = e.params[1]
 | 
						|
            v = Reflect.field(self.macros,m)
 | 
						|
            pl = list()
 | 
						|
            old = self.buf
 | 
						|
            pl.append(self.resolve)
 | 
						|
            _g_head = params.h
 | 
						|
            while (_g_head is not None):
 | 
						|
                val = _g_head.item
 | 
						|
                _g_head = _g_head.next
 | 
						|
                p = val
 | 
						|
                if (p.index == 0):
 | 
						|
                    v1 = p.params[0]
 | 
						|
                    x = self.resolve(v1)
 | 
						|
                    pl.append(x)
 | 
						|
                else:
 | 
						|
                    self.buf = StringBuf()
 | 
						|
                    self.run(p)
 | 
						|
                    x1 = self.buf.b.getvalue()
 | 
						|
                    pl.append(x1)
 | 
						|
            self.buf = old
 | 
						|
            try:
 | 
						|
                _this = self.buf
 | 
						|
                s = Std.string(Std.string(Reflect.callMethod(self.macros,v,pl)))
 | 
						|
                _this.b.write(s)
 | 
						|
            except BaseException as _g:
 | 
						|
                None
 | 
						|
                e = haxe_Exception.caught(_g).unwrap()
 | 
						|
                plstr = None
 | 
						|
                try:
 | 
						|
                    plstr = ",".join([python_Boot.toString1(x1,'') for x1 in pl])
 | 
						|
                except BaseException as _g:
 | 
						|
                    plstr = "???"
 | 
						|
                msg = (((((("Macro call " + ("null" if m is None else m)) + "(") + ("null" if plstr is None else plstr)) + ") failed (") + Std.string(e)) + ")")
 | 
						|
                raise haxe_Exception.thrown(msg)
 | 
						|
        else:
 | 
						|
            pass
 | 
						|
 | 
						|
haxe_Template._hx_class = haxe_Template
 | 
						|
 | 
						|
 | 
						|
class haxe_ValueException(haxe_Exception):
 | 
						|
    _hx_class_name = "haxe.ValueException"
 | 
						|
    __slots__ = ("value",)
 | 
						|
    _hx_fields = ["value"]
 | 
						|
    _hx_methods = ["unwrap"]
 | 
						|
    _hx_statics = []
 | 
						|
    _hx_interfaces = []
 | 
						|
    _hx_super = haxe_Exception
 | 
						|
 | 
						|
 | 
						|
    def __init__(self,value,previous = None,native = None):
 | 
						|
        self.value = None
 | 
						|
        super().__init__(("null" if ((value is None)) else Std.string(value)),previous,native)
 | 
						|
        self.value = value
 | 
						|
 | 
						|
    def unwrap(self):
 | 
						|
        return self.value
 | 
						|
 | 
						|
haxe_ValueException._hx_class = haxe_ValueException
 | 
						|
 | 
						|
 | 
						|
class haxe_ds_List:
 | 
						|
    _hx_class_name = "haxe.ds.List"
 | 
						|
    __slots__ = ("h", "q", "length")
 | 
						|
    _hx_fields = ["h", "q", "length"]
 | 
						|
    _hx_methods = ["add", "push", "first", "pop", "isEmpty", "toString"]
 | 
						|
 | 
						|
    def __init__(self):
 | 
						|
        self.q = None
 | 
						|
        self.h = None
 | 
						|
        self.length = 0
 | 
						|
 | 
						|
    def add(self,item):
 | 
						|
        x = haxe_ds__List_ListNode(item,None)
 | 
						|
        if (self.h is None):
 | 
						|
            self.h = x
 | 
						|
        else:
 | 
						|
            self.q.next = x
 | 
						|
        self.q = x
 | 
						|
        _hx_local_0 = self
 | 
						|
        _hx_local_1 = _hx_local_0.length
 | 
						|
        _hx_local_0.length = (_hx_local_1 + 1)
 | 
						|
        _hx_local_1
 | 
						|
 | 
						|
    def push(self,item):
 | 
						|
        x = haxe_ds__List_ListNode(item,self.h)
 | 
						|
        self.h = x
 | 
						|
        if (self.q is None):
 | 
						|
            self.q = x
 | 
						|
        _hx_local_0 = self
 | 
						|
        _hx_local_1 = _hx_local_0.length
 | 
						|
        _hx_local_0.length = (_hx_local_1 + 1)
 | 
						|
        _hx_local_1
 | 
						|
 | 
						|
    def first(self):
 | 
						|
        if (self.h is None):
 | 
						|
            return None
 | 
						|
        else:
 | 
						|
            return self.h.item
 | 
						|
 | 
						|
    def pop(self):
 | 
						|
        if (self.h is None):
 | 
						|
            return None
 | 
						|
        x = self.h.item
 | 
						|
        self.h = self.h.next
 | 
						|
        if (self.h is None):
 | 
						|
            self.q = None
 | 
						|
        _hx_local_0 = self
 | 
						|
        _hx_local_1 = _hx_local_0.length
 | 
						|
        _hx_local_0.length = (_hx_local_1 - 1)
 | 
						|
        _hx_local_1
 | 
						|
        return x
 | 
						|
 | 
						|
    def isEmpty(self):
 | 
						|
        return (self.h is None)
 | 
						|
 | 
						|
    def toString(self):
 | 
						|
        s_b = python_lib_io_StringIO()
 | 
						|
        first = True
 | 
						|
        l = self.h
 | 
						|
        s_b.write("{")
 | 
						|
        while (l is not None):
 | 
						|
            if first:
 | 
						|
                first = False
 | 
						|
            else:
 | 
						|
                s_b.write(", ")
 | 
						|
            s_b.write(Std.string(Std.string(l.item)))
 | 
						|
            l = l.next
 | 
						|
        s_b.write("}")
 | 
						|
        return s_b.getvalue()
 | 
						|
 | 
						|
haxe_ds_List._hx_class = haxe_ds_List
 | 
						|
 | 
						|
 | 
						|
class haxe_ds__List_ListNode:
 | 
						|
    _hx_class_name = "haxe.ds._List.ListNode"
 | 
						|
    __slots__ = ("item", "next")
 | 
						|
    _hx_fields = ["item", "next"]
 | 
						|
 | 
						|
    def __init__(self,item,next):
 | 
						|
        self.item = item
 | 
						|
        self.next = next
 | 
						|
 | 
						|
haxe_ds__List_ListNode._hx_class = haxe_ds__List_ListNode
 | 
						|
 | 
						|
 | 
						|
class haxe_ds_StringMap:
 | 
						|
    _hx_class_name = "haxe.ds.StringMap"
 | 
						|
    __slots__ = ("h",)
 | 
						|
    _hx_fields = ["h"]
 | 
						|
    _hx_interfaces = [haxe_IMap]
 | 
						|
 | 
						|
    def __init__(self):
 | 
						|
        self.h = dict()
 | 
						|
 | 
						|
haxe_ds_StringMap._hx_class = haxe_ds_StringMap
 | 
						|
 | 
						|
 | 
						|
class haxe_iterators_ArrayKeyValueIterator:
 | 
						|
    _hx_class_name = "haxe.iterators.ArrayKeyValueIterator"
 | 
						|
    __slots__ = ("current", "array")
 | 
						|
    _hx_fields = ["current", "array"]
 | 
						|
    _hx_methods = ["hasNext", "next"]
 | 
						|
 | 
						|
    def __init__(self,array):
 | 
						|
        self.current = 0
 | 
						|
        self.array = array
 | 
						|
 | 
						|
    def hasNext(self):
 | 
						|
        return (self.current < len(self.array))
 | 
						|
 | 
						|
    def next(self):
 | 
						|
        def _hx_local_3():
 | 
						|
            def _hx_local_2():
 | 
						|
                _hx_local_0 = self
 | 
						|
                _hx_local_1 = _hx_local_0.current
 | 
						|
                _hx_local_0.current = (_hx_local_1 + 1)
 | 
						|
                return _hx_local_1
 | 
						|
            return _hx_AnonObject({'value': python_internal_ArrayImpl._get(self.array, self.current), 'key': _hx_local_2()})
 | 
						|
        return _hx_local_3()
 | 
						|
 | 
						|
haxe_iterators_ArrayKeyValueIterator._hx_class = haxe_iterators_ArrayKeyValueIterator
 | 
						|
 | 
						|
 | 
						|
class python_Boot:
 | 
						|
    _hx_class_name = "python.Boot"
 | 
						|
    __slots__ = ()
 | 
						|
    _hx_statics = ["keywords", "_add_dynamic", "toString1", "fields", "simpleField", "hasField", "field", "getInstanceFields", "getSuperClass", "getClassFields", "prefixLength", "unhandleKeywords"]
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def _add_dynamic(a,b):
 | 
						|
        if (isinstance(a,str) and isinstance(b,str)):
 | 
						|
            return (a + b)
 | 
						|
        if (isinstance(a,str) or isinstance(b,str)):
 | 
						|
            return (python_Boot.toString1(a,"") + python_Boot.toString1(b,""))
 | 
						|
        return (a + b)
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def toString1(o,s):
 | 
						|
        if (o is None):
 | 
						|
            return "null"
 | 
						|
        if isinstance(o,str):
 | 
						|
            return o
 | 
						|
        if (s is None):
 | 
						|
            s = ""
 | 
						|
        if (len(s) >= 5):
 | 
						|
            return "<...>"
 | 
						|
        if isinstance(o,bool):
 | 
						|
            if o:
 | 
						|
                return "true"
 | 
						|
            else:
 | 
						|
                return "false"
 | 
						|
        if (isinstance(o,int) and (not isinstance(o,bool))):
 | 
						|
            return str(o)
 | 
						|
        if isinstance(o,float):
 | 
						|
            try:
 | 
						|
                if (o == int(o)):
 | 
						|
                    return str(Math.floor((o + 0.5)))
 | 
						|
                else:
 | 
						|
                    return str(o)
 | 
						|
            except BaseException as _g:
 | 
						|
                None
 | 
						|
                return str(o)
 | 
						|
        if isinstance(o,list):
 | 
						|
            o1 = o
 | 
						|
            l = len(o1)
 | 
						|
            st = "["
 | 
						|
            s = (("null" if s is None else s) + "\t")
 | 
						|
            _g = 0
 | 
						|
            _g1 = l
 | 
						|
            while (_g < _g1):
 | 
						|
                i = _g
 | 
						|
                _g = (_g + 1)
 | 
						|
                prefix = ""
 | 
						|
                if (i > 0):
 | 
						|
                    prefix = ","
 | 
						|
                st = (("null" if st is None else st) + HxOverrides.stringOrNull(((("null" if prefix is None else prefix) + HxOverrides.stringOrNull(python_Boot.toString1((o1[i] if i >= 0 and i < len(o1) else None),s))))))
 | 
						|
            st = (("null" if st is None else st) + "]")
 | 
						|
            return st
 | 
						|
        try:
 | 
						|
            if hasattr(o,"toString"):
 | 
						|
                return o.toString()
 | 
						|
        except BaseException as _g:
 | 
						|
            None
 | 
						|
        if hasattr(o,"__class__"):
 | 
						|
            if isinstance(o,_hx_AnonObject):
 | 
						|
                toStr = None
 | 
						|
                try:
 | 
						|
                    fields = python_Boot.fields(o)
 | 
						|
                    _g = []
 | 
						|
                    _g1 = 0
 | 
						|
                    while (_g1 < len(fields)):
 | 
						|
                        f = (fields[_g1] if _g1 >= 0 and _g1 < len(fields) else None)
 | 
						|
                        _g1 = (_g1 + 1)
 | 
						|
                        x = ((("" + ("null" if f is None else f)) + " : ") + HxOverrides.stringOrNull(python_Boot.toString1(python_Boot.simpleField(o,f),(("null" if s is None else s) + "\t"))))
 | 
						|
                        _g.append(x)
 | 
						|
                    fieldsStr = _g
 | 
						|
                    toStr = (("{ " + HxOverrides.stringOrNull(", ".join([x1 for x1 in fieldsStr]))) + " }")
 | 
						|
                except BaseException as _g:
 | 
						|
                    None
 | 
						|
                    return "{ ... }"
 | 
						|
                if (toStr is None):
 | 
						|
                    return "{ ... }"
 | 
						|
                else:
 | 
						|
                    return toStr
 | 
						|
            if isinstance(o,Enum):
 | 
						|
                o1 = o
 | 
						|
                l = len(o1.params)
 | 
						|
                hasParams = (l > 0)
 | 
						|
                if hasParams:
 | 
						|
                    paramsStr = ""
 | 
						|
                    _g = 0
 | 
						|
                    _g1 = l
 | 
						|
                    while (_g < _g1):
 | 
						|
                        i = _g
 | 
						|
                        _g = (_g + 1)
 | 
						|
                        prefix = ""
 | 
						|
                        if (i > 0):
 | 
						|
                            prefix = ","
 | 
						|
                        paramsStr = (("null" if paramsStr is None else paramsStr) + HxOverrides.stringOrNull(((("null" if prefix is None else prefix) + HxOverrides.stringOrNull(python_Boot.toString1(o1.params[i],s))))))
 | 
						|
                    return (((HxOverrides.stringOrNull(o1.tag) + "(") + ("null" if paramsStr is None else paramsStr)) + ")")
 | 
						|
                else:
 | 
						|
                    return o1.tag
 | 
						|
            if hasattr(o,"_hx_class_name"):
 | 
						|
                if (o.__class__.__name__ != "type"):
 | 
						|
                    fields = python_Boot.getInstanceFields(o)
 | 
						|
                    _g = []
 | 
						|
                    _g1 = 0
 | 
						|
                    while (_g1 < len(fields)):
 | 
						|
                        f = (fields[_g1] if _g1 >= 0 and _g1 < len(fields) else None)
 | 
						|
                        _g1 = (_g1 + 1)
 | 
						|
                        x = ((("" + ("null" if f is None else f)) + " : ") + HxOverrides.stringOrNull(python_Boot.toString1(python_Boot.simpleField(o,f),(("null" if s is None else s) + "\t"))))
 | 
						|
                        _g.append(x)
 | 
						|
                    fieldsStr = _g
 | 
						|
                    toStr = (((HxOverrides.stringOrNull(o._hx_class_name) + "( ") + HxOverrides.stringOrNull(", ".join([x1 for x1 in fieldsStr]))) + " )")
 | 
						|
                    return toStr
 | 
						|
                else:
 | 
						|
                    fields = python_Boot.getClassFields(o)
 | 
						|
                    _g = []
 | 
						|
                    _g1 = 0
 | 
						|
                    while (_g1 < len(fields)):
 | 
						|
                        f = (fields[_g1] if _g1 >= 0 and _g1 < len(fields) else None)
 | 
						|
                        _g1 = (_g1 + 1)
 | 
						|
                        x = ((("" + ("null" if f is None else f)) + " : ") + HxOverrides.stringOrNull(python_Boot.toString1(python_Boot.simpleField(o,f),(("null" if s is None else s) + "\t"))))
 | 
						|
                        _g.append(x)
 | 
						|
                    fieldsStr = _g
 | 
						|
                    toStr = (((("#" + HxOverrides.stringOrNull(o._hx_class_name)) + "( ") + HxOverrides.stringOrNull(", ".join([x1 for x1 in fieldsStr]))) + " )")
 | 
						|
                    return toStr
 | 
						|
            if ((type(o) == type) and (o == str)):
 | 
						|
                return "#String"
 | 
						|
            if ((type(o) == type) and (o == list)):
 | 
						|
                return "#Array"
 | 
						|
            if callable(o):
 | 
						|
                return "function"
 | 
						|
            try:
 | 
						|
                if hasattr(o,"__repr__"):
 | 
						|
                    return o.__repr__()
 | 
						|
            except BaseException as _g:
 | 
						|
                None
 | 
						|
            if hasattr(o,"__str__"):
 | 
						|
                return o.__str__([])
 | 
						|
            if hasattr(o,"__name__"):
 | 
						|
                return o.__name__
 | 
						|
            return "???"
 | 
						|
        else:
 | 
						|
            return str(o)
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def fields(o):
 | 
						|
        a = []
 | 
						|
        if (o is not None):
 | 
						|
            if hasattr(o,"_hx_fields"):
 | 
						|
                fields = o._hx_fields
 | 
						|
                if (fields is not None):
 | 
						|
                    return list(fields)
 | 
						|
            if isinstance(o,_hx_AnonObject):
 | 
						|
                d = o.__dict__
 | 
						|
                keys = d.keys()
 | 
						|
                handler = python_Boot.unhandleKeywords
 | 
						|
                for k in keys:
 | 
						|
                    if (k != '_hx_disable_getattr'):
 | 
						|
                        a.append(handler(k))
 | 
						|
            elif hasattr(o,"__dict__"):
 | 
						|
                d = o.__dict__
 | 
						|
                keys1 = d.keys()
 | 
						|
                for k in keys1:
 | 
						|
                    a.append(k)
 | 
						|
        return a
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def simpleField(o,field):
 | 
						|
        if (field is None):
 | 
						|
            return None
 | 
						|
        field1 = (("_hx_" + field) if ((field in python_Boot.keywords)) else (("_hx_" + field) if (((((len(field) > 2) and ((ord(field[0]) == 95))) and ((ord(field[1]) == 95))) and ((ord(field[(len(field) - 1)]) != 95)))) else field))
 | 
						|
        if hasattr(o,field1):
 | 
						|
            return getattr(o,field1)
 | 
						|
        else:
 | 
						|
            return None
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def hasField(o,field):
 | 
						|
        if isinstance(o,_hx_AnonObject):
 | 
						|
            return o._hx_hasattr(field)
 | 
						|
        return hasattr(o,(("_hx_" + field) if ((field in python_Boot.keywords)) else (("_hx_" + field) if (((((len(field) > 2) and ((ord(field[0]) == 95))) and ((ord(field[1]) == 95))) and ((ord(field[(len(field) - 1)]) != 95)))) else field)))
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def field(o,field):
 | 
						|
        if (field is None):
 | 
						|
            return None
 | 
						|
        if isinstance(o,str):
 | 
						|
            field1 = field
 | 
						|
            _hx_local_0 = len(field1)
 | 
						|
            if (_hx_local_0 == 10):
 | 
						|
                if (field1 == "charCodeAt"):
 | 
						|
                    return python_internal_MethodClosure(o,HxString.charCodeAt)
 | 
						|
                else:
 | 
						|
                    field1 = (("_hx_" + field) if ((field in python_Boot.keywords)) else (("_hx_" + field) if (((((len(field) > 2) and ((ord(field[0]) == 95))) and ((ord(field[1]) == 95))) and ((ord(field[(len(field) - 1)]) != 95)))) else field))
 | 
						|
                    return (getattr(o,field1) if (hasattr(o,field1)) else None)
 | 
						|
            elif (_hx_local_0 == 11):
 | 
						|
                if (field1 == "lastIndexOf"):
 | 
						|
                    return python_internal_MethodClosure(o,HxString.lastIndexOf)
 | 
						|
                elif (field1 == "toLowerCase"):
 | 
						|
                    return python_internal_MethodClosure(o,HxString.toLowerCase)
 | 
						|
                elif (field1 == "toUpperCase"):
 | 
						|
                    return python_internal_MethodClosure(o,HxString.toUpperCase)
 | 
						|
                else:
 | 
						|
                    field1 = (("_hx_" + field) if ((field in python_Boot.keywords)) else (("_hx_" + field) if (((((len(field) > 2) and ((ord(field[0]) == 95))) and ((ord(field[1]) == 95))) and ((ord(field[(len(field) - 1)]) != 95)))) else field))
 | 
						|
                    return (getattr(o,field1) if (hasattr(o,field1)) else None)
 | 
						|
            elif (_hx_local_0 == 9):
 | 
						|
                if (field1 == "substring"):
 | 
						|
                    return python_internal_MethodClosure(o,HxString.substring)
 | 
						|
                else:
 | 
						|
                    field1 = (("_hx_" + field) if ((field in python_Boot.keywords)) else (("_hx_" + field) if (((((len(field) > 2) and ((ord(field[0]) == 95))) and ((ord(field[1]) == 95))) and ((ord(field[(len(field) - 1)]) != 95)))) else field))
 | 
						|
                    return (getattr(o,field1) if (hasattr(o,field1)) else None)
 | 
						|
            elif (_hx_local_0 == 5):
 | 
						|
                if (field1 == "split"):
 | 
						|
                    return python_internal_MethodClosure(o,HxString.split)
 | 
						|
                else:
 | 
						|
                    field1 = (("_hx_" + field) if ((field in python_Boot.keywords)) else (("_hx_" + field) if (((((len(field) > 2) and ((ord(field[0]) == 95))) and ((ord(field[1]) == 95))) and ((ord(field[(len(field) - 1)]) != 95)))) else field))
 | 
						|
                    return (getattr(o,field1) if (hasattr(o,field1)) else None)
 | 
						|
            elif (_hx_local_0 == 7):
 | 
						|
                if (field1 == "indexOf"):
 | 
						|
                    return python_internal_MethodClosure(o,HxString.indexOf)
 | 
						|
                else:
 | 
						|
                    field1 = (("_hx_" + field) if ((field in python_Boot.keywords)) else (("_hx_" + field) if (((((len(field) > 2) and ((ord(field[0]) == 95))) and ((ord(field[1]) == 95))) and ((ord(field[(len(field) - 1)]) != 95)))) else field))
 | 
						|
                    return (getattr(o,field1) if (hasattr(o,field1)) else None)
 | 
						|
            elif (_hx_local_0 == 8):
 | 
						|
                if (field1 == "toString"):
 | 
						|
                    return python_internal_MethodClosure(o,HxString.toString)
 | 
						|
                else:
 | 
						|
                    field1 = (("_hx_" + field) if ((field in python_Boot.keywords)) else (("_hx_" + field) if (((((len(field) > 2) and ((ord(field[0]) == 95))) and ((ord(field[1]) == 95))) and ((ord(field[(len(field) - 1)]) != 95)))) else field))
 | 
						|
                    return (getattr(o,field1) if (hasattr(o,field1)) else None)
 | 
						|
            elif (_hx_local_0 == 6):
 | 
						|
                if (field1 == "charAt"):
 | 
						|
                    return python_internal_MethodClosure(o,HxString.charAt)
 | 
						|
                elif (field1 == "length"):
 | 
						|
                    return len(o)
 | 
						|
                elif (field1 == "substr"):
 | 
						|
                    return python_internal_MethodClosure(o,HxString.substr)
 | 
						|
                else:
 | 
						|
                    field1 = (("_hx_" + field) if ((field in python_Boot.keywords)) else (("_hx_" + field) if (((((len(field) > 2) and ((ord(field[0]) == 95))) and ((ord(field[1]) == 95))) and ((ord(field[(len(field) - 1)]) != 95)))) else field))
 | 
						|
                    return (getattr(o,field1) if (hasattr(o,field1)) else None)
 | 
						|
            else:
 | 
						|
                field1 = (("_hx_" + field) if ((field in python_Boot.keywords)) else (("_hx_" + field) if (((((len(field) > 2) and ((ord(field[0]) == 95))) and ((ord(field[1]) == 95))) and ((ord(field[(len(field) - 1)]) != 95)))) else field))
 | 
						|
                return (getattr(o,field1) if (hasattr(o,field1)) else None)
 | 
						|
        elif isinstance(o,list):
 | 
						|
            field1 = field
 | 
						|
            _hx_local_1 = len(field1)
 | 
						|
            if (_hx_local_1 == 11):
 | 
						|
                if (field1 == "lastIndexOf"):
 | 
						|
                    return python_internal_MethodClosure(o,python_internal_ArrayImpl.lastIndexOf)
 | 
						|
                else:
 | 
						|
                    field1 = (("_hx_" + field) if ((field in python_Boot.keywords)) else (("_hx_" + field) if (((((len(field) > 2) and ((ord(field[0]) == 95))) and ((ord(field[1]) == 95))) and ((ord(field[(len(field) - 1)]) != 95)))) else field))
 | 
						|
                    return (getattr(o,field1) if (hasattr(o,field1)) else None)
 | 
						|
            elif (_hx_local_1 == 4):
 | 
						|
                if (field1 == "copy"):
 | 
						|
                    return python_internal_MethodClosure(o,python_internal_ArrayImpl.copy)
 | 
						|
                elif (field1 == "join"):
 | 
						|
                    return python_internal_MethodClosure(o,python_internal_ArrayImpl.join)
 | 
						|
                elif (field1 == "push"):
 | 
						|
                    return python_internal_MethodClosure(o,python_internal_ArrayImpl.push)
 | 
						|
                elif (field1 == "sort"):
 | 
						|
                    return python_internal_MethodClosure(o,python_internal_ArrayImpl.sort)
 | 
						|
                else:
 | 
						|
                    field1 = (("_hx_" + field) if ((field in python_Boot.keywords)) else (("_hx_" + field) if (((((len(field) > 2) and ((ord(field[0]) == 95))) and ((ord(field[1]) == 95))) and ((ord(field[(len(field) - 1)]) != 95)))) else field))
 | 
						|
                    return (getattr(o,field1) if (hasattr(o,field1)) else None)
 | 
						|
            elif (_hx_local_1 == 5):
 | 
						|
                if (field1 == "shift"):
 | 
						|
                    return python_internal_MethodClosure(o,python_internal_ArrayImpl.shift)
 | 
						|
                elif (field1 == "slice"):
 | 
						|
                    return python_internal_MethodClosure(o,python_internal_ArrayImpl.slice)
 | 
						|
                else:
 | 
						|
                    field1 = (("_hx_" + field) if ((field in python_Boot.keywords)) else (("_hx_" + field) if (((((len(field) > 2) and ((ord(field[0]) == 95))) and ((ord(field[1]) == 95))) and ((ord(field[(len(field) - 1)]) != 95)))) else field))
 | 
						|
                    return (getattr(o,field1) if (hasattr(o,field1)) else None)
 | 
						|
            elif (_hx_local_1 == 7):
 | 
						|
                if (field1 == "indexOf"):
 | 
						|
                    return python_internal_MethodClosure(o,python_internal_ArrayImpl.indexOf)
 | 
						|
                elif (field1 == "reverse"):
 | 
						|
                    return python_internal_MethodClosure(o,python_internal_ArrayImpl.reverse)
 | 
						|
                elif (field1 == "unshift"):
 | 
						|
                    return python_internal_MethodClosure(o,python_internal_ArrayImpl.unshift)
 | 
						|
                else:
 | 
						|
                    field1 = (("_hx_" + field) if ((field in python_Boot.keywords)) else (("_hx_" + field) if (((((len(field) > 2) and ((ord(field[0]) == 95))) and ((ord(field[1]) == 95))) and ((ord(field[(len(field) - 1)]) != 95)))) else field))
 | 
						|
                    return (getattr(o,field1) if (hasattr(o,field1)) else None)
 | 
						|
            elif (_hx_local_1 == 3):
 | 
						|
                if (field1 == "map"):
 | 
						|
                    return python_internal_MethodClosure(o,python_internal_ArrayImpl.map)
 | 
						|
                elif (field1 == "pop"):
 | 
						|
                    return python_internal_MethodClosure(o,python_internal_ArrayImpl.pop)
 | 
						|
                else:
 | 
						|
                    field1 = (("_hx_" + field) if ((field in python_Boot.keywords)) else (("_hx_" + field) if (((((len(field) > 2) and ((ord(field[0]) == 95))) and ((ord(field[1]) == 95))) and ((ord(field[(len(field) - 1)]) != 95)))) else field))
 | 
						|
                    return (getattr(o,field1) if (hasattr(o,field1)) else None)
 | 
						|
            elif (_hx_local_1 == 8):
 | 
						|
                if (field1 == "contains"):
 | 
						|
                    return python_internal_MethodClosure(o,python_internal_ArrayImpl.contains)
 | 
						|
                elif (field1 == "iterator"):
 | 
						|
                    return python_internal_MethodClosure(o,python_internal_ArrayImpl.iterator)
 | 
						|
                elif (field1 == "toString"):
 | 
						|
                    return python_internal_MethodClosure(o,python_internal_ArrayImpl.toString)
 | 
						|
                else:
 | 
						|
                    field1 = (("_hx_" + field) if ((field in python_Boot.keywords)) else (("_hx_" + field) if (((((len(field) > 2) and ((ord(field[0]) == 95))) and ((ord(field[1]) == 95))) and ((ord(field[(len(field) - 1)]) != 95)))) else field))
 | 
						|
                    return (getattr(o,field1) if (hasattr(o,field1)) else None)
 | 
						|
            elif (_hx_local_1 == 16):
 | 
						|
                if (field1 == "keyValueIterator"):
 | 
						|
                    return python_internal_MethodClosure(o,python_internal_ArrayImpl.keyValueIterator)
 | 
						|
                else:
 | 
						|
                    field1 = (("_hx_" + field) if ((field in python_Boot.keywords)) else (("_hx_" + field) if (((((len(field) > 2) and ((ord(field[0]) == 95))) and ((ord(field[1]) == 95))) and ((ord(field[(len(field) - 1)]) != 95)))) else field))
 | 
						|
                    return (getattr(o,field1) if (hasattr(o,field1)) else None)
 | 
						|
            elif (_hx_local_1 == 6):
 | 
						|
                if (field1 == "concat"):
 | 
						|
                    return python_internal_MethodClosure(o,python_internal_ArrayImpl.concat)
 | 
						|
                elif (field1 == "filter"):
 | 
						|
                    return python_internal_MethodClosure(o,python_internal_ArrayImpl.filter)
 | 
						|
                elif (field1 == "insert"):
 | 
						|
                    return python_internal_MethodClosure(o,python_internal_ArrayImpl.insert)
 | 
						|
                elif (field1 == "length"):
 | 
						|
                    return len(o)
 | 
						|
                elif (field1 == "remove"):
 | 
						|
                    return python_internal_MethodClosure(o,python_internal_ArrayImpl.remove)
 | 
						|
                elif (field1 == "splice"):
 | 
						|
                    return python_internal_MethodClosure(o,python_internal_ArrayImpl.splice)
 | 
						|
                else:
 | 
						|
                    field1 = (("_hx_" + field) if ((field in python_Boot.keywords)) else (("_hx_" + field) if (((((len(field) > 2) and ((ord(field[0]) == 95))) and ((ord(field[1]) == 95))) and ((ord(field[(len(field) - 1)]) != 95)))) else field))
 | 
						|
                    return (getattr(o,field1) if (hasattr(o,field1)) else None)
 | 
						|
            else:
 | 
						|
                field1 = (("_hx_" + field) if ((field in python_Boot.keywords)) else (("_hx_" + field) if (((((len(field) > 2) and ((ord(field[0]) == 95))) and ((ord(field[1]) == 95))) and ((ord(field[(len(field) - 1)]) != 95)))) else field))
 | 
						|
                return (getattr(o,field1) if (hasattr(o,field1)) else None)
 | 
						|
        else:
 | 
						|
            field1 = (("_hx_" + field) if ((field in python_Boot.keywords)) else (("_hx_" + field) if (((((len(field) > 2) and ((ord(field[0]) == 95))) and ((ord(field[1]) == 95))) and ((ord(field[(len(field) - 1)]) != 95)))) else field))
 | 
						|
            return (getattr(o,field1) if (hasattr(o,field1)) else None)
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def getInstanceFields(c):
 | 
						|
        f = (list(c._hx_fields) if (hasattr(c,"_hx_fields")) else [])
 | 
						|
        if hasattr(c,"_hx_methods"):
 | 
						|
            f = (f + c._hx_methods)
 | 
						|
        sc = python_Boot.getSuperClass(c)
 | 
						|
        if (sc is None):
 | 
						|
            return f
 | 
						|
        else:
 | 
						|
            scArr = python_Boot.getInstanceFields(sc)
 | 
						|
            scMap = set(scArr)
 | 
						|
            _g = 0
 | 
						|
            while (_g < len(f)):
 | 
						|
                f1 = (f[_g] if _g >= 0 and _g < len(f) else None)
 | 
						|
                _g = (_g + 1)
 | 
						|
                if (not (f1 in scMap)):
 | 
						|
                    scArr.append(f1)
 | 
						|
            return scArr
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def getSuperClass(c):
 | 
						|
        if (c is None):
 | 
						|
            return None
 | 
						|
        try:
 | 
						|
            if hasattr(c,"_hx_super"):
 | 
						|
                return c._hx_super
 | 
						|
            return None
 | 
						|
        except BaseException as _g:
 | 
						|
            None
 | 
						|
        return None
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def getClassFields(c):
 | 
						|
        if hasattr(c,"_hx_statics"):
 | 
						|
            x = c._hx_statics
 | 
						|
            return list(x)
 | 
						|
        else:
 | 
						|
            return []
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def unhandleKeywords(name):
 | 
						|
        if (HxString.substr(name,0,python_Boot.prefixLength) == "_hx_"):
 | 
						|
            real = HxString.substr(name,python_Boot.prefixLength,None)
 | 
						|
            if (real in python_Boot.keywords):
 | 
						|
                return real
 | 
						|
        return name
 | 
						|
python_Boot._hx_class = python_Boot
 | 
						|
 | 
						|
 | 
						|
class python_HaxeIterator:
 | 
						|
    _hx_class_name = "python.HaxeIterator"
 | 
						|
    __slots__ = ("it", "x", "has", "checked")
 | 
						|
    _hx_fields = ["it", "x", "has", "checked"]
 | 
						|
    _hx_methods = ["next", "hasNext"]
 | 
						|
 | 
						|
    def __init__(self,it):
 | 
						|
        self.checked = False
 | 
						|
        self.has = False
 | 
						|
        self.x = None
 | 
						|
        self.it = it
 | 
						|
 | 
						|
    def next(self):
 | 
						|
        if (not self.checked):
 | 
						|
            self.hasNext()
 | 
						|
        self.checked = False
 | 
						|
        return self.x
 | 
						|
 | 
						|
    def hasNext(self):
 | 
						|
        if (not self.checked):
 | 
						|
            try:
 | 
						|
                self.x = self.it.__next__()
 | 
						|
                self.has = True
 | 
						|
            except BaseException as _g:
 | 
						|
                None
 | 
						|
                if Std.isOfType(haxe_Exception.caught(_g).unwrap(),StopIteration):
 | 
						|
                    self.has = False
 | 
						|
                    self.x = None
 | 
						|
                else:
 | 
						|
                    raise _g
 | 
						|
            self.checked = True
 | 
						|
        return self.has
 | 
						|
 | 
						|
python_HaxeIterator._hx_class = python_HaxeIterator
 | 
						|
 | 
						|
 | 
						|
class python_Lib:
 | 
						|
    _hx_class_name = "python.Lib"
 | 
						|
    __slots__ = ()
 | 
						|
    _hx_statics = ["anonToDict"]
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def anonToDict(o):
 | 
						|
        if isinstance(o,_hx_AnonObject):
 | 
						|
            return o.__dict__.copy()
 | 
						|
        else:
 | 
						|
            return None
 | 
						|
python_Lib._hx_class = python_Lib
 | 
						|
 | 
						|
 | 
						|
class python_internal_ArrayImpl:
 | 
						|
    _hx_class_name = "python.internal.ArrayImpl"
 | 
						|
    __slots__ = ()
 | 
						|
    _hx_statics = ["get_length", "concat", "copy", "iterator", "keyValueIterator", "indexOf", "lastIndexOf", "join", "toString", "pop", "push", "unshift", "remove", "contains", "shift", "slice", "sort", "splice", "map", "filter", "insert", "reverse", "_get", "_set"]
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def get_length(x):
 | 
						|
        return len(x)
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def concat(a1,a2):
 | 
						|
        return (a1 + a2)
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def copy(x):
 | 
						|
        return list(x)
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def iterator(x):
 | 
						|
        return python_HaxeIterator(x.__iter__())
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def keyValueIterator(x):
 | 
						|
        return haxe_iterators_ArrayKeyValueIterator(x)
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def indexOf(a,x,fromIndex = None):
 | 
						|
        _hx_len = len(a)
 | 
						|
        l = (0 if ((fromIndex is None)) else ((_hx_len + fromIndex) if ((fromIndex < 0)) else fromIndex))
 | 
						|
        if (l < 0):
 | 
						|
            l = 0
 | 
						|
        _g = l
 | 
						|
        _g1 = _hx_len
 | 
						|
        while (_g < _g1):
 | 
						|
            i = _g
 | 
						|
            _g = (_g + 1)
 | 
						|
            if HxOverrides.eq(a[i],x):
 | 
						|
                return i
 | 
						|
        return -1
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def lastIndexOf(a,x,fromIndex = None):
 | 
						|
        _hx_len = len(a)
 | 
						|
        l = (_hx_len if ((fromIndex is None)) else (((_hx_len + fromIndex) + 1) if ((fromIndex < 0)) else (fromIndex + 1)))
 | 
						|
        if (l > _hx_len):
 | 
						|
            l = _hx_len
 | 
						|
        while True:
 | 
						|
            l = (l - 1)
 | 
						|
            tmp = l
 | 
						|
            if (not ((tmp > -1))):
 | 
						|
                break
 | 
						|
            if HxOverrides.eq(a[l],x):
 | 
						|
                return l
 | 
						|
        return -1
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def join(x,sep):
 | 
						|
        return sep.join([python_Boot.toString1(x1,'') for x1 in x])
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def toString(x):
 | 
						|
        return (("[" + HxOverrides.stringOrNull(",".join([python_Boot.toString1(x1,'') for x1 in x]))) + "]")
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def pop(x):
 | 
						|
        if (len(x) == 0):
 | 
						|
            return None
 | 
						|
        else:
 | 
						|
            return x.pop()
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def push(x,e):
 | 
						|
        x.append(e)
 | 
						|
        return len(x)
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def unshift(x,e):
 | 
						|
        x.insert(0, e)
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def remove(x,e):
 | 
						|
        try:
 | 
						|
            x.remove(e)
 | 
						|
            return True
 | 
						|
        except BaseException as _g:
 | 
						|
            None
 | 
						|
            return False
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def contains(x,e):
 | 
						|
        return (e in x)
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def shift(x):
 | 
						|
        if (len(x) == 0):
 | 
						|
            return None
 | 
						|
        return x.pop(0)
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def slice(x,pos,end = None):
 | 
						|
        return x[pos:end]
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def sort(x,f):
 | 
						|
        x.sort(key= python_lib_Functools.cmp_to_key(f))
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def splice(x,pos,_hx_len):
 | 
						|
        if (pos < 0):
 | 
						|
            pos = (len(x) + pos)
 | 
						|
        if (pos < 0):
 | 
						|
            pos = 0
 | 
						|
        res = x[pos:(pos + _hx_len)]
 | 
						|
        del x[pos:(pos + _hx_len)]
 | 
						|
        return res
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def map(x,f):
 | 
						|
        return list(map(f,x))
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def filter(x,f):
 | 
						|
        return list(filter(f,x))
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def insert(a,pos,x):
 | 
						|
        a.insert(pos, x)
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def reverse(a):
 | 
						|
        a.reverse()
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def _get(x,idx):
 | 
						|
        if ((idx > -1) and ((idx < len(x)))):
 | 
						|
            return x[idx]
 | 
						|
        else:
 | 
						|
            return None
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def _set(x,idx,v):
 | 
						|
        l = len(x)
 | 
						|
        while (l < idx):
 | 
						|
            x.append(None)
 | 
						|
            l = (l + 1)
 | 
						|
        if (l == idx):
 | 
						|
            x.append(v)
 | 
						|
        else:
 | 
						|
            x[idx] = v
 | 
						|
        return v
 | 
						|
python_internal_ArrayImpl._hx_class = python_internal_ArrayImpl
 | 
						|
 | 
						|
 | 
						|
class HxOverrides:
 | 
						|
    _hx_class_name = "HxOverrides"
 | 
						|
    __slots__ = ()
 | 
						|
    _hx_statics = ["iterator", "eq", "stringOrNull", "length", "arrayGet"]
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def iterator(x):
 | 
						|
        if isinstance(x,list):
 | 
						|
            return haxe_iterators_ArrayIterator(x)
 | 
						|
        return x.iterator()
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def eq(a,b):
 | 
						|
        if (isinstance(a,list) or isinstance(b,list)):
 | 
						|
            return a is b
 | 
						|
        return (a == b)
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def stringOrNull(s):
 | 
						|
        if (s is None):
 | 
						|
            return "null"
 | 
						|
        else:
 | 
						|
            return s
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def length(x):
 | 
						|
        if isinstance(x,str):
 | 
						|
            return len(x)
 | 
						|
        elif isinstance(x,list):
 | 
						|
            return len(x)
 | 
						|
        return x.length
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def arrayGet(a,i):
 | 
						|
        if isinstance(a,list):
 | 
						|
            x = a
 | 
						|
            if ((i > -1) and ((i < len(x)))):
 | 
						|
                return x[i]
 | 
						|
            else:
 | 
						|
                return None
 | 
						|
        else:
 | 
						|
            return a[i]
 | 
						|
HxOverrides._hx_class = HxOverrides
 | 
						|
 | 
						|
 | 
						|
class python_internal_MethodClosure:
 | 
						|
    _hx_class_name = "python.internal.MethodClosure"
 | 
						|
    __slots__ = ("obj", "func")
 | 
						|
    _hx_fields = ["obj", "func"]
 | 
						|
    _hx_methods = ["__call__"]
 | 
						|
 | 
						|
    def __init__(self,obj,func):
 | 
						|
        self.obj = obj
 | 
						|
        self.func = func
 | 
						|
 | 
						|
    def __call__(self,*args):
 | 
						|
        return self.func(self.obj,*args)
 | 
						|
 | 
						|
python_internal_MethodClosure._hx_class = python_internal_MethodClosure
 | 
						|
 | 
						|
 | 
						|
class HxString:
 | 
						|
    _hx_class_name = "HxString"
 | 
						|
    __slots__ = ()
 | 
						|
    _hx_statics = ["split", "charCodeAt", "charAt", "lastIndexOf", "toUpperCase", "toLowerCase", "indexOf", "indexOfImpl", "toString", "get_length", "substring", "substr"]
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def split(s,d):
 | 
						|
        if (d == ""):
 | 
						|
            return list(s)
 | 
						|
        else:
 | 
						|
            return s.split(d)
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def charCodeAt(s,index):
 | 
						|
        if ((((s is None) or ((len(s) == 0))) or ((index < 0))) or ((index >= len(s)))):
 | 
						|
            return None
 | 
						|
        else:
 | 
						|
            return ord(s[index])
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def charAt(s,index):
 | 
						|
        if ((index < 0) or ((index >= len(s)))):
 | 
						|
            return ""
 | 
						|
        else:
 | 
						|
            return s[index]
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def lastIndexOf(s,_hx_str,startIndex = None):
 | 
						|
        if (startIndex is None):
 | 
						|
            return s.rfind(_hx_str, 0, len(s))
 | 
						|
        elif (_hx_str == ""):
 | 
						|
            length = len(s)
 | 
						|
            if (startIndex < 0):
 | 
						|
                startIndex = (length + startIndex)
 | 
						|
                if (startIndex < 0):
 | 
						|
                    startIndex = 0
 | 
						|
            if (startIndex > length):
 | 
						|
                return length
 | 
						|
            else:
 | 
						|
                return startIndex
 | 
						|
        else:
 | 
						|
            i = s.rfind(_hx_str, 0, (startIndex + 1))
 | 
						|
            startLeft = (max(0,((startIndex + 1) - len(_hx_str))) if ((i == -1)) else (i + 1))
 | 
						|
            check = s.find(_hx_str, startLeft, len(s))
 | 
						|
            if ((check > i) and ((check <= startIndex))):
 | 
						|
                return check
 | 
						|
            else:
 | 
						|
                return i
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def toUpperCase(s):
 | 
						|
        return s.upper()
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def toLowerCase(s):
 | 
						|
        return s.lower()
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def indexOf(s,_hx_str,startIndex = None):
 | 
						|
        if (startIndex is None):
 | 
						|
            return s.find(_hx_str)
 | 
						|
        else:
 | 
						|
            return HxString.indexOfImpl(s,_hx_str,startIndex)
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def indexOfImpl(s,_hx_str,startIndex):
 | 
						|
        if (_hx_str == ""):
 | 
						|
            length = len(s)
 | 
						|
            if (startIndex < 0):
 | 
						|
                startIndex = (length + startIndex)
 | 
						|
                if (startIndex < 0):
 | 
						|
                    startIndex = 0
 | 
						|
            if (startIndex > length):
 | 
						|
                return length
 | 
						|
            else:
 | 
						|
                return startIndex
 | 
						|
        return s.find(_hx_str, startIndex)
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def toString(s):
 | 
						|
        return s
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def get_length(s):
 | 
						|
        return len(s)
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def substring(s,startIndex,endIndex = None):
 | 
						|
        if (startIndex < 0):
 | 
						|
            startIndex = 0
 | 
						|
        if (endIndex is None):
 | 
						|
            return s[startIndex:]
 | 
						|
        else:
 | 
						|
            if (endIndex < 0):
 | 
						|
                endIndex = 0
 | 
						|
            if (endIndex < startIndex):
 | 
						|
                return s[endIndex:startIndex]
 | 
						|
            else:
 | 
						|
                return s[startIndex:endIndex]
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def substr(s,startIndex,_hx_len = None):
 | 
						|
        if (_hx_len is None):
 | 
						|
            return s[startIndex:]
 | 
						|
        else:
 | 
						|
            if (_hx_len == 0):
 | 
						|
                return ""
 | 
						|
            if (startIndex < 0):
 | 
						|
                startIndex = (len(s) + startIndex)
 | 
						|
                if (startIndex < 0):
 | 
						|
                    startIndex = 0
 | 
						|
            return s[startIndex:(startIndex + _hx_len)]
 | 
						|
HxString._hx_class = HxString
 | 
						|
 | 
						|
 | 
						|
class xrfragment_Filter:
 | 
						|
    _hx_class_name = "xrfragment.Filter"
 | 
						|
    __slots__ = ("str", "q")
 | 
						|
    _hx_fields = ["str", "q"]
 | 
						|
    _hx_methods = ["toObject", "get", "parse", "test", "testProperty"]
 | 
						|
 | 
						|
    def __init__(self,_hx_str):
 | 
						|
        self.q = _hx_AnonObject({})
 | 
						|
        self.str = ""
 | 
						|
        if (_hx_str is not None):
 | 
						|
            self.parse(_hx_str)
 | 
						|
 | 
						|
    def toObject(self):
 | 
						|
        return Reflect.copy(self.q)
 | 
						|
 | 
						|
    def get(self):
 | 
						|
        return Reflect.copy(self.q)
 | 
						|
 | 
						|
    def parse(self,_hx_str):
 | 
						|
        token = _hx_str.split(" ")
 | 
						|
        q = _hx_AnonObject({})
 | 
						|
        def _hx_local_0(_hx_str,prefix = None):
 | 
						|
            if (prefix is None):
 | 
						|
                prefix = ""
 | 
						|
            _hx_str = StringTools.trim(_hx_str)
 | 
						|
            k = HxOverrides.arrayGet(_hx_str.split("="), 0)
 | 
						|
            v = HxOverrides.arrayGet(_hx_str.split("="), 1)
 | 
						|
            _hx_filter = _hx_AnonObject({})
 | 
						|
            if Reflect.field(q,(("null" if prefix is None else prefix) + ("null" if k is None else k))):
 | 
						|
                _hx_filter = Reflect.field(q,(("null" if prefix is None else prefix) + ("null" if k is None else k)))
 | 
						|
            _this = xrfragment_XRF.isProp
 | 
						|
            _this.matchObj = python_lib_Re.search(_this.pattern,_hx_str)
 | 
						|
            if (_this.matchObj is not None):
 | 
						|
                oper = ""
 | 
						|
                startIndex = None
 | 
						|
                if (((_hx_str.find(">") if ((startIndex is None)) else HxString.indexOfImpl(_hx_str,">",startIndex))) != -1):
 | 
						|
                    oper = ">"
 | 
						|
                startIndex = None
 | 
						|
                if (((_hx_str.find("<") if ((startIndex is None)) else HxString.indexOfImpl(_hx_str,"<",startIndex))) != -1):
 | 
						|
                    oper = "<"
 | 
						|
                _this = xrfragment_XRF.isExclude
 | 
						|
                _this.matchObj = python_lib_Re.search(_this.pattern,k)
 | 
						|
                if (_this.matchObj is not None):
 | 
						|
                    k = HxString.substr(k,1,None)
 | 
						|
                v = HxString.substr(v,len(oper),None)
 | 
						|
                if (len(oper) == 0):
 | 
						|
                    oper = "="
 | 
						|
                rule = _hx_AnonObject({})
 | 
						|
                _this = xrfragment_XRF.isNumber
 | 
						|
                _this.matchObj = python_lib_Re.search(_this.pattern,v)
 | 
						|
                if (_this.matchObj is not None):
 | 
						|
                    value = Std.parseFloat(v)
 | 
						|
                    setattr(rule,(("_hx_" + oper) if ((oper in python_Boot.keywords)) else (("_hx_" + oper) if (((((len(oper) > 2) and ((ord(oper[0]) == 95))) and ((ord(oper[1]) == 95))) and ((ord(oper[(len(oper) - 1)]) != 95)))) else oper)),value)
 | 
						|
                else:
 | 
						|
                    setattr(rule,(("_hx_" + oper) if ((oper in python_Boot.keywords)) else (("_hx_" + oper) if (((((len(oper) > 2) and ((ord(oper[0]) == 95))) and ((ord(oper[1]) == 95))) and ((ord(oper[(len(oper) - 1)]) != 95)))) else oper)),v)
 | 
						|
                setattr(q,(("_hx_" + "expr") if (("expr" in python_Boot.keywords)) else (("_hx_" + "expr") if (((((len("expr") > 2) and ((ord("expr"[0]) == 95))) and ((ord("expr"[1]) == 95))) and ((ord("expr"[(len("expr") - 1)]) != 95)))) else "expr")),rule)
 | 
						|
            _this = xrfragment_XRF.isDeep
 | 
						|
            _this.matchObj = python_lib_Re.search(_this.pattern,_hx_str)
 | 
						|
            value = ((Reflect.field(k.split("*"),"length") - 1) if ((_this.matchObj is not None)) else 0)
 | 
						|
            setattr(q,(("_hx_" + "deep") if (("deep" in python_Boot.keywords)) else (("_hx_" + "deep") if (((((len("deep") > 2) and ((ord("deep"[0]) == 95))) and ((ord("deep"[1]) == 95))) and ((ord("deep"[(len("deep") - 1)]) != 95)))) else "deep")),value)
 | 
						|
            _this = xrfragment_XRF.isExclude
 | 
						|
            _this.matchObj = python_lib_Re.search(_this.pattern,_hx_str)
 | 
						|
            value = (False if ((_this.matchObj is not None)) else True)
 | 
						|
            setattr(q,(("_hx_" + "show") if (("show" in python_Boot.keywords)) else (("_hx_" + "show") if (((((len("show") > 2) and ((ord("show"[0]) == 95))) and ((ord("show"[1]) == 95))) and ((ord("show"[(len("show") - 1)]) != 95)))) else "show")),value)
 | 
						|
            value = xrfragment_XRF.operators.replace(k,"")
 | 
						|
            setattr(q,(("_hx_" + "key") if (("key" in python_Boot.keywords)) else (("_hx_" + "key") if (((((len("key") > 2) and ((ord("key"[0]) == 95))) and ((ord("key"[1]) == 95))) and ((ord("key"[(len("key") - 1)]) != 95)))) else "key")),value)
 | 
						|
            setattr(q,(("_hx_" + "value") if (("value" in python_Boot.keywords)) else (("_hx_" + "value") if (((((len("value") > 2) and ((ord("value"[0]) == 95))) and ((ord("value"[1]) == 95))) and ((ord("value"[(len("value") - 1)]) != 95)))) else "value")),v)
 | 
						|
        process = _hx_local_0
 | 
						|
        _g = 0
 | 
						|
        _g1 = len(token)
 | 
						|
        while (_g < _g1):
 | 
						|
            i = _g
 | 
						|
            _g = (_g + 1)
 | 
						|
            process((token[i] if i >= 0 and i < len(token) else None))
 | 
						|
        def _hx_local_2():
 | 
						|
            def _hx_local_1():
 | 
						|
                self.q = q
 | 
						|
                return self.q
 | 
						|
            return _hx_local_1()
 | 
						|
        return _hx_local_2()
 | 
						|
 | 
						|
    def test(self,obj = None):
 | 
						|
        qualify = False
 | 
						|
        _g = 0
 | 
						|
        _g1 = python_Boot.fields(obj)
 | 
						|
        while (_g < len(_g1)):
 | 
						|
            k = (_g1[_g] if _g >= 0 and _g < len(_g1) else None)
 | 
						|
            _g = (_g + 1)
 | 
						|
            v = Std.string(Reflect.field(obj,k))
 | 
						|
            if self.testProperty(k,v):
 | 
						|
                qualify = True
 | 
						|
        _g = 0
 | 
						|
        _g1 = python_Boot.fields(obj)
 | 
						|
        while (_g < len(_g1)):
 | 
						|
            k = (_g1[_g] if _g >= 0 and _g < len(_g1) else None)
 | 
						|
            _g = (_g + 1)
 | 
						|
            v = Std.string(Reflect.field(obj,k))
 | 
						|
            if self.testProperty(k,v,True):
 | 
						|
                qualify = False
 | 
						|
        return qualify
 | 
						|
 | 
						|
    def testProperty(self,property,value,exclude = None):
 | 
						|
        conds = 0
 | 
						|
        fails = 0
 | 
						|
        qualify = 0
 | 
						|
        def _hx_local_2(expr):
 | 
						|
 | 
						|
 | 
						|
            conds = (conds + 1)
 | 
						|
            fails = (fails + (0 if expr else 1))
 | 
						|
            return expr
 | 
						|
        testprop = _hx_local_2
 | 
						|
        if (Reflect.field(self.q,value) is not None):
 | 
						|
            v = Reflect.field(self.q,value)
 | 
						|
            if (Reflect.field(v,property) is not None):
 | 
						|
                return Reflect.field(v,property)
 | 
						|
        if Reflect.field(self.q,"expr"):
 | 
						|
            f = Reflect.field(self.q,"expr")
 | 
						|
            if (not Reflect.field(self.q,"show")):
 | 
						|
                if (((Reflect.field(f,"!=") is not None) and testprop((Std.string(value) == Std.string(Reflect.field(f,"!="))))) and exclude):
 | 
						|
                    qualify = (qualify + 1)
 | 
						|
            else:
 | 
						|
                if ((Reflect.field(f,"*") is not None) and testprop((Std.parseFloat(value) is not None))):
 | 
						|
                    qualify = (qualify + 1)
 | 
						|
                if ((Reflect.field(f,">") is not None) and testprop((Std.parseFloat(value) >= Std.parseFloat(Reflect.field(f,">"))))):
 | 
						|
                    qualify = (qualify + 1)
 | 
						|
                if ((Reflect.field(f,"<") is not None) and testprop((Std.parseFloat(value) <= Std.parseFloat(Reflect.field(f,"<"))))):
 | 
						|
                    qualify = (qualify + 1)
 | 
						|
                if ((Reflect.field(f,"=") is not None) and ((testprop((value == Reflect.field(f,"="))) or testprop((Std.parseFloat(value) == Std.parseFloat(Reflect.field(f,"="))))))):
 | 
						|
                    qualify = (qualify + 1)
 | 
						|
        return (qualify > 0)
 | 
						|
 | 
						|
xrfragment_Filter._hx_class = xrfragment_Filter
 | 
						|
 | 
						|
 | 
						|
class xrfragment_Parser:
 | 
						|
    _hx_class_name = "xrfragment.Parser"
 | 
						|
    __slots__ = ()
 | 
						|
    _hx_statics = ["error", "debug", "parse", "getMetaData"]
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def parse(key,value,store,index = None):
 | 
						|
        Frag = haxe_ds_StringMap()
 | 
						|
        Frag.h["#"] = ((xrfragment_XRF.IMMUTABLE | xrfragment_XRF.T_PREDEFINED_VIEW) | xrfragment_XRF.PV_EXECUTE)
 | 
						|
        Frag.h["src"] = xrfragment_XRF.T_URL
 | 
						|
        Frag.h["href"] = (xrfragment_XRF.T_URL | xrfragment_XRF.T_PREDEFINED_VIEW)
 | 
						|
        Frag.h["tag"] = (xrfragment_XRF.IMMUTABLE | xrfragment_XRF.T_STRING)
 | 
						|
        Frag.h["pos"] = ((((xrfragment_XRF.PV_OVERRIDE | xrfragment_XRF.T_VECTOR3) | xrfragment_XRF.T_STRING) | xrfragment_XRF.METADATA) | xrfragment_XRF.NAVIGATOR)
 | 
						|
        Frag.h["rot"] = ((((xrfragment_XRF.QUERY_OPERATOR | xrfragment_XRF.PV_OVERRIDE) | xrfragment_XRF.T_VECTOR3) | xrfragment_XRF.METADATA) | xrfragment_XRF.NAVIGATOR)
 | 
						|
        Frag.h["t"] = ((((xrfragment_XRF.PV_OVERRIDE | xrfragment_XRF.T_FLOAT) | xrfragment_XRF.T_VECTOR2) | xrfragment_XRF.NAVIGATOR) | xrfragment_XRF.METADATA)
 | 
						|
        Frag.h["s"] = (xrfragment_XRF.PV_OVERRIDE | xrfragment_XRF.T_MEDIAFRAG)
 | 
						|
        Frag.h["loop"] = (xrfragment_XRF.PV_OVERRIDE | xrfragment_XRF.T_PREDEFINED_VIEW)
 | 
						|
        Frag.h["uv"] = (xrfragment_XRF.T_VECTOR2 | xrfragment_XRF.T_MEDIAFRAG)
 | 
						|
        Frag.h["namespace"] = (xrfragment_XRF.IMMUTABLE | xrfragment_XRF.T_STRING)
 | 
						|
        Frag.h["SPDX"] = (xrfragment_XRF.IMMUTABLE | xrfragment_XRF.T_STRING)
 | 
						|
        Frag.h["unit"] = (xrfragment_XRF.IMMUTABLE | xrfragment_XRF.T_STRING)
 | 
						|
        Frag.h["description"] = (xrfragment_XRF.IMMUTABLE | xrfragment_XRF.T_STRING)
 | 
						|
        keyStripped = xrfragment_XRF.operators.replace(key,"")
 | 
						|
        isPVDynamic = ((len(key) > 0) and (not (key in Frag.h)))
 | 
						|
        if isPVDynamic:
 | 
						|
            v = xrfragment_XRF(key,(xrfragment_XRF.PV_EXECUTE | xrfragment_XRF.NAVIGATOR),index)
 | 
						|
            v.validate(value)
 | 
						|
            v.flags = xrfragment_XRF.set(xrfragment_XRF.T_DYNAMICKEY,v.flags)
 | 
						|
            if (not (key in Frag.h)):
 | 
						|
                v.flags = xrfragment_XRF.set(xrfragment_XRF.CUSTOMFRAG,v.flags)
 | 
						|
            if (len(value) == 0):
 | 
						|
                v.flags = xrfragment_XRF.set(xrfragment_XRF.T_DYNAMICKEYVALUE,v.flags)
 | 
						|
            setattr(store,(("_hx_" + keyStripped) if ((keyStripped in python_Boot.keywords)) else (("_hx_" + keyStripped) if (((((len(keyStripped) > 2) and ((ord(keyStripped[0]) == 95))) and ((ord(keyStripped[1]) == 95))) and ((ord(keyStripped[(len(keyStripped) - 1)]) != 95)))) else keyStripped)),v)
 | 
						|
            return True
 | 
						|
        v = xrfragment_XRF(key,Frag.h.get(key,None),index)
 | 
						|
        if (key in Frag.h):
 | 
						|
            if (not v.validate(value)):
 | 
						|
                print(str((((("⚠ fragment '" + ("null" if key is None else key)) + "' has incompatible value (") + ("null" if value is None else value)) + ")")))
 | 
						|
                return False
 | 
						|
            setattr(store,(("_hx_" + keyStripped) if ((keyStripped in python_Boot.keywords)) else (("_hx_" + keyStripped) if (((((len(keyStripped) > 2) and ((ord(keyStripped[0]) == 95))) and ((ord(keyStripped[1]) == 95))) and ((ord(keyStripped[(len(keyStripped) - 1)]) != 95)))) else keyStripped)),v)
 | 
						|
            if xrfragment_Parser.debug:
 | 
						|
                print(str(((("✔ " + ("null" if key is None else key)) + ": ") + HxOverrides.stringOrNull(v.string))))
 | 
						|
        else:
 | 
						|
            if Std.isOfType(value,str):
 | 
						|
                v.guessType(v,value)
 | 
						|
            v.flags = xrfragment_XRF.set(xrfragment_XRF.CUSTOMFRAG,v.flags)
 | 
						|
            setattr(store,(("_hx_" + keyStripped) if ((keyStripped in python_Boot.keywords)) else (("_hx_" + keyStripped) if (((((len(keyStripped) > 2) and ((ord(keyStripped[0]) == 95))) and ((ord(keyStripped[1]) == 95))) and ((ord(keyStripped[(len(keyStripped) - 1)]) != 95)))) else keyStripped)),v)
 | 
						|
        return True
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def getMetaData():
 | 
						|
        meta = _hx_AnonObject({'title': ["title", "og:title", "dc.title"], 'description': ["aria-description", "og:description", "dc.description"], 'author': ["author", "dc.creator"], 'publisher': ["publisher", "dc.publisher"], 'website': ["og:site_name", "og:url", "dc.publisher"], 'license': ["SPDX", "dc.rights"]})
 | 
						|
        return meta
 | 
						|
xrfragment_Parser._hx_class = xrfragment_Parser
 | 
						|
 | 
						|
 | 
						|
class xrfragment_URI:
 | 
						|
    _hx_class_name = "xrfragment.URI"
 | 
						|
    __slots__ = ("url", "source", "scheme", "authority", "userInfo", "user", "password", "host", "port", "relative", "path", "directory", "file", "fileExt", "query", "fragment", "hash", "XRF", "URN")
 | 
						|
    _hx_fields = ["url", "source", "scheme", "authority", "userInfo", "user", "password", "host", "port", "relative", "path", "directory", "file", "fileExt", "query", "fragment", "hash", "XRF", "URN"]
 | 
						|
    _hx_statics = ["__meta__", "_parts", "parseFragment", "template", "parse", "computeVars", "toString", "appendURI", "isRelative", "appendToRelativeURI", "appendToAbsoluteURI", "toAbsolute", "cloneURI"]
 | 
						|
 | 
						|
    def __init__(self):
 | 
						|
        self.URN = None
 | 
						|
        self.query = None
 | 
						|
        self.fileExt = None
 | 
						|
        self.file = None
 | 
						|
        self.directory = None
 | 
						|
        self.path = None
 | 
						|
        self.relative = None
 | 
						|
        self.port = None
 | 
						|
        self.host = None
 | 
						|
        self.password = None
 | 
						|
        self.user = None
 | 
						|
        self.userInfo = None
 | 
						|
        self.authority = None
 | 
						|
        self.scheme = None
 | 
						|
        self.source = None
 | 
						|
        self.url = None
 | 
						|
        self.XRF = _hx_AnonObject({})
 | 
						|
        self.hash = _hx_AnonObject({})
 | 
						|
        self.fragment = ""
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def parseFragment(url,_hx_filter):
 | 
						|
        store = _hx_AnonObject({})
 | 
						|
        tmp = None
 | 
						|
        if (url is not None):
 | 
						|
            startIndex = None
 | 
						|
            tmp = (((url.find("#") if ((startIndex is None)) else HxString.indexOfImpl(url,"#",startIndex))) == -1)
 | 
						|
        else:
 | 
						|
            tmp = True
 | 
						|
        if tmp:
 | 
						|
            return store
 | 
						|
        fragment = url.split("#")
 | 
						|
        _this = (fragment[1] if 1 < len(fragment) else None)
 | 
						|
        splitArray = _this.split("&")
 | 
						|
        _g = 0
 | 
						|
        _g1 = len(splitArray)
 | 
						|
        while (_g < _g1):
 | 
						|
            i = _g
 | 
						|
            _g = (_g + 1)
 | 
						|
            _this = (splitArray[i] if i >= 0 and i < len(splitArray) else None)
 | 
						|
            splitByEqual = _this.split("=")
 | 
						|
            regexPlus = EReg("\\+","g")
 | 
						|
            key = (splitByEqual[0] if 0 < len(splitByEqual) else None)
 | 
						|
            value = ""
 | 
						|
            if (len(splitByEqual) > 1):
 | 
						|
                _this1 = xrfragment_XRF.isVector
 | 
						|
                _this1.matchObj = python_lib_Re.search(_this1.pattern,(splitByEqual[1] if 1 < len(splitByEqual) else None))
 | 
						|
                if (_this1.matchObj is not None):
 | 
						|
                    value = (splitByEqual[1] if 1 < len(splitByEqual) else None)
 | 
						|
                else:
 | 
						|
                    _this2 = regexPlus.split((splitByEqual[1] if 1 < len(splitByEqual) else None))
 | 
						|
                    value = python_lib_urllib_Parse.unquote(" ".join([python_Boot.toString1(x1,'') for x1 in _this2]))
 | 
						|
            ok = xrfragment_Parser.parse(key,value,store,i)
 | 
						|
        if ((_hx_filter is not None) and ((_hx_filter != 0))):
 | 
						|
            _g = 0
 | 
						|
            _g1 = python_Boot.fields(store)
 | 
						|
            while (_g < len(_g1)):
 | 
						|
                key = (_g1[_g] if _g >= 0 and _g < len(_g1) else None)
 | 
						|
                _g = (_g + 1)
 | 
						|
                xrf = Reflect.field(store,key)
 | 
						|
                if (not xrf._hx_is(_hx_filter)):
 | 
						|
                    Reflect.deleteField(store,key)
 | 
						|
        return store
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def template(uri,vars):
 | 
						|
        parts = uri.split("#")
 | 
						|
        if (len(parts) == 1):
 | 
						|
            return uri
 | 
						|
        frag = (parts[1] if 1 < len(parts) else None)
 | 
						|
        frag = StringTools.replace(frag,"{","::")
 | 
						|
        frag = StringTools.replace(frag,"}","::")
 | 
						|
        frag = haxe_Template(frag).execute(vars)
 | 
						|
        frag = StringTools.replace(frag,"null","")
 | 
						|
        python_internal_ArrayImpl._set(parts, 1, frag)
 | 
						|
        return "#".join([python_Boot.toString1(x1,'') for x1 in parts])
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def parse(stringUrl,flags):
 | 
						|
        r = EReg("^(?:(?![^:@]+:[^:@/]*@)([^:/?#.]+):)?(?://)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:/?#]*)(?::(\\d*))?)(((/(?:[^?#](?![^?#/]*\\.[^?#/.]+(?:[?#]|$)))*/?)?([^?#/]*))(?:\\?([^#]*))?(?:#(.*))?)","")
 | 
						|
        startIndex = None
 | 
						|
        if (((((stringUrl.find("://") if ((startIndex is None)) else HxString.indexOfImpl(stringUrl,"://",startIndex))) == -1) and (((("" if ((0 >= len(stringUrl))) else stringUrl[0])) != "/"))) and (((("" if ((0 >= len(stringUrl))) else stringUrl[0])) != "#"))):
 | 
						|
            stringUrl = ("/" + ("null" if stringUrl is None else stringUrl))
 | 
						|
        r.matchObj = python_lib_Re.search(r.pattern,stringUrl)
 | 
						|
        url = xrfragment_URI()
 | 
						|
        _g = 0
 | 
						|
        _g1 = len(xrfragment_URI._parts)
 | 
						|
        while (_g < _g1):
 | 
						|
            i = _g
 | 
						|
            _g = (_g + 1)
 | 
						|
            field = python_internal_ArrayImpl._get(xrfragment_URI._parts, i)
 | 
						|
            value = r.matchObj.group(i)
 | 
						|
            setattr(url,(("_hx_" + field) if ((field in python_Boot.keywords)) else (("_hx_" + field) if (((((len(field) > 2) and ((ord(field[0]) == 95))) and ((ord(field[1]) == 95))) and ((ord(field[(len(field) - 1)]) != 95)))) else field)),value)
 | 
						|
        if (xrfragment_URI.isRelative(url) == True):
 | 
						|
            if ((url.directory is None) and ((url.host is not None))):
 | 
						|
                url.file = url.host
 | 
						|
            url.host = ""
 | 
						|
        url.hash = _hx_AnonObject({})
 | 
						|
        if ((url.fragment is not None) and ((len(url.fragment) > 0))):
 | 
						|
            url.XRF = xrfragment_URI.parseFragment(("#" + HxOverrides.stringOrNull(url.fragment)),flags)
 | 
						|
            key = None
 | 
						|
            _g = 0
 | 
						|
            _g1 = python_Boot.fields(url.XRF)
 | 
						|
            while (_g < len(_g1)):
 | 
						|
                key = (_g1[_g] if _g >= 0 and _g < len(_g1) else None)
 | 
						|
                _g = (_g + 1)
 | 
						|
                v = Reflect.field(url.XRF,key)
 | 
						|
                this1 = url.hash
 | 
						|
                value = Reflect.field(v,"string")
 | 
						|
                setattr(this1,(("_hx_" + key) if ((key in python_Boot.keywords)) else (("_hx_" + key) if (((((len(key) > 2) and ((ord(key[0]) == 95))) and ((ord(key[1]) == 95))) and ((ord(key[(len(key) - 1)]) != 95)))) else key)),value)
 | 
						|
        xrfragment_URI.computeVars(url)
 | 
						|
        return url
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def computeVars(url):
 | 
						|
        r = EReg("//","g")
 | 
						|
        tmp = None
 | 
						|
        if (url.directory is not None):
 | 
						|
            _this = url.directory
 | 
						|
            startIndex = None
 | 
						|
            tmp = (((_this.find("//") if ((startIndex is None)) else HxString.indexOfImpl(_this,"//",startIndex))) != -1)
 | 
						|
        else:
 | 
						|
            tmp = False
 | 
						|
        if tmp:
 | 
						|
            url.directory = r.replace(url.directory,"/")
 | 
						|
        tmp = None
 | 
						|
        if (url.path is not None):
 | 
						|
            _this = url.path
 | 
						|
            startIndex = None
 | 
						|
            tmp = (((_this.find("//") if ((startIndex is None)) else HxString.indexOfImpl(_this,"//",startIndex))) != -1)
 | 
						|
        else:
 | 
						|
            tmp = False
 | 
						|
        if tmp:
 | 
						|
            url.path = r.replace(url.path,"/")
 | 
						|
        tmp = None
 | 
						|
        if (url.file is not None):
 | 
						|
            _this = url.file
 | 
						|
            startIndex = None
 | 
						|
            tmp = (((_this.find("//") if ((startIndex is None)) else HxString.indexOfImpl(_this,"//",startIndex))) != -1)
 | 
						|
        else:
 | 
						|
            tmp = False
 | 
						|
        if tmp:
 | 
						|
            url.file = r.replace(url.file,"/")
 | 
						|
        url.URN = ((HxOverrides.stringOrNull(url.scheme) + "://") + HxOverrides.stringOrNull(url.host))
 | 
						|
        if (url.port is not None):
 | 
						|
            url.URN = (HxOverrides.stringOrNull(url.URN) + HxOverrides.stringOrNull(((":" + HxOverrides.stringOrNull(url.port)))))
 | 
						|
        url.URN = (HxOverrides.stringOrNull(url.URN) + HxOverrides.stringOrNull(url.directory))
 | 
						|
        if (url.file is not None):
 | 
						|
            _this = url.file
 | 
						|
            parts = _this.split(".")
 | 
						|
            if (len(parts) > 1):
 | 
						|
                url.fileExt = (None if ((len(parts) == 0)) else parts.pop())
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def toString(url):
 | 
						|
        result = ""
 | 
						|
        if (url.scheme is not None):
 | 
						|
            result = (("null" if result is None else result) + HxOverrides.stringOrNull(((HxOverrides.stringOrNull(url.scheme) + "://"))))
 | 
						|
        if (url.user is not None):
 | 
						|
            result = (("null" if result is None else result) + HxOverrides.stringOrNull(((HxOverrides.stringOrNull(url.user) + ":"))))
 | 
						|
        if (url.password is not None):
 | 
						|
            result = (("null" if result is None else result) + HxOverrides.stringOrNull(((HxOverrides.stringOrNull(url.password) + "@"))))
 | 
						|
        if (url.host is not None):
 | 
						|
            result = (("null" if result is None else result) + HxOverrides.stringOrNull(url.host))
 | 
						|
        if (url.port is not None):
 | 
						|
            result = (("null" if result is None else result) + HxOverrides.stringOrNull(((":" + HxOverrides.stringOrNull(url.port)))))
 | 
						|
        if (url.directory is not None):
 | 
						|
            result = (("null" if result is None else result) + HxOverrides.stringOrNull(url.directory))
 | 
						|
        if (url.file is not None):
 | 
						|
            result = (("null" if result is None else result) + HxOverrides.stringOrNull(url.file))
 | 
						|
        if (url.query is not None):
 | 
						|
            result = (("null" if result is None else result) + HxOverrides.stringOrNull((("?" + HxOverrides.stringOrNull(url.query)))))
 | 
						|
        if (url.fragment is not None):
 | 
						|
            result = (("null" if result is None else result) + HxOverrides.stringOrNull((("#" + HxOverrides.stringOrNull(url.fragment)))))
 | 
						|
        return result
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def appendURI(url,appendedURI):
 | 
						|
        if (xrfragment_URI.isRelative(url) == True):
 | 
						|
            return xrfragment_URI.appendToRelativeURI(url,appendedURI)
 | 
						|
        else:
 | 
						|
            return xrfragment_URI.appendToAbsoluteURI(url,appendedURI)
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def isRelative(url):
 | 
						|
        return (url.scheme is None)
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def appendToRelativeURI(url,appendedURI):
 | 
						|
        if ((url.directory is None) or ((url.host is None))):
 | 
						|
            return xrfragment_URI.cloneURI(appendedURI)
 | 
						|
        resultURI = xrfragment_URI()
 | 
						|
        resultURI.host = url.host
 | 
						|
        resultURI.directory = url.directory
 | 
						|
        if (appendedURI.host is not None):
 | 
						|
            resultURI.directory = (HxOverrides.stringOrNull(resultURI.directory) + HxOverrides.stringOrNull(appendedURI.host))
 | 
						|
        if (appendedURI.directory is not None):
 | 
						|
            directory = appendedURI.directory
 | 
						|
            if (appendedURI.host is None):
 | 
						|
                resultURI.directory = (HxOverrides.stringOrNull(resultURI.directory) + HxOverrides.stringOrNull(HxString.substr(directory,1,None)))
 | 
						|
            else:
 | 
						|
                resultURI.directory = (HxOverrides.stringOrNull(resultURI.directory) + ("null" if directory is None else directory))
 | 
						|
        if (appendedURI.file is not None):
 | 
						|
            resultURI.file = appendedURI.file
 | 
						|
        resultURI.path = (HxOverrides.stringOrNull(resultURI.directory) + HxOverrides.stringOrNull(resultURI.file))
 | 
						|
        if (appendedURI.query is not None):
 | 
						|
            resultURI.query = appendedURI.query
 | 
						|
        if (appendedURI.fragment is not None):
 | 
						|
            resultURI.fragment = appendedURI.fragment
 | 
						|
        return resultURI
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def appendToAbsoluteURI(url,appendedURI):
 | 
						|
        resultURI = xrfragment_URI()
 | 
						|
        if (url.scheme is not None):
 | 
						|
            resultURI.scheme = url.scheme
 | 
						|
        if (url.host is not None):
 | 
						|
            resultURI.host = url.host
 | 
						|
        directory = ""
 | 
						|
        if (url.directory is not None):
 | 
						|
            directory = url.directory
 | 
						|
        if (appendedURI.host is not None):
 | 
						|
            appendedURI.directory = (HxOverrides.stringOrNull(appendedURI.directory) + HxOverrides.stringOrNull(appendedURI.host))
 | 
						|
        if (appendedURI.directory is not None):
 | 
						|
            directory = (("null" if directory is None else directory) + HxOverrides.stringOrNull(appendedURI.directory))
 | 
						|
        resultURI.directory = directory
 | 
						|
        if (appendedURI.file is not None):
 | 
						|
            resultURI.file = appendedURI.file
 | 
						|
        resultURI.path = (HxOverrides.stringOrNull(resultURI.directory) + HxOverrides.stringOrNull(resultURI.file))
 | 
						|
        if (appendedURI.query is not None):
 | 
						|
            resultURI.query = appendedURI.query
 | 
						|
        if (appendedURI.fragment is not None):
 | 
						|
            resultURI.fragment = appendedURI.fragment
 | 
						|
        return resultURI
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def toAbsolute(url,newUrl):
 | 
						|
        newURI = xrfragment_URI.parse(newUrl,0)
 | 
						|
        resultURI = xrfragment_URI()
 | 
						|
        resultURI.port = url.port
 | 
						|
        resultURI.source = newUrl
 | 
						|
        if (newURI.scheme is not None):
 | 
						|
            resultURI.scheme = newURI.scheme
 | 
						|
        else:
 | 
						|
            resultURI.scheme = url.scheme
 | 
						|
        if ((newURI.host is not None) and ((len(newURI.host) > 0))):
 | 
						|
            resultURI.host = newURI.host
 | 
						|
            resultURI.port = None
 | 
						|
            resultURI.fragment = None
 | 
						|
            resultURI.hash = _hx_AnonObject({})
 | 
						|
            resultURI.XRF = _hx_AnonObject({})
 | 
						|
            if (newURI.port is not None):
 | 
						|
                resultURI.port = newURI.port
 | 
						|
        else:
 | 
						|
            resultURI.host = url.host
 | 
						|
        directory = ""
 | 
						|
        if (url.directory is not None):
 | 
						|
            directory = url.directory
 | 
						|
        tmp = None
 | 
						|
        if (newURI.directory is not None):
 | 
						|
            _this = newURI.source
 | 
						|
            tmp = ((("" if ((0 >= len(_this))) else _this[0])) != "#")
 | 
						|
        else:
 | 
						|
            tmp = False
 | 
						|
        if (tmp and ((len(newURI.directory) > 0))):
 | 
						|
            tmp = None
 | 
						|
            if ((("" if ((0 >= len(newUrl))) else newUrl[0])) != "/"):
 | 
						|
                startIndex = None
 | 
						|
                tmp = (((newUrl.find("://") if ((startIndex is None)) else HxString.indexOfImpl(newUrl,"://",startIndex))) == -1)
 | 
						|
            else:
 | 
						|
                tmp = False
 | 
						|
            if tmp:
 | 
						|
                stripRelative = EReg("\\./.*","")
 | 
						|
                directory = stripRelative.replace(directory,"")
 | 
						|
                directory = (("null" if directory is None else directory) + HxOverrides.stringOrNull(newURI.directory))
 | 
						|
            else:
 | 
						|
                directory = newURI.directory
 | 
						|
        resultURI.directory = directory
 | 
						|
        if ((newURI.file is not None) and ((len(newURI.file) > 0))):
 | 
						|
            resultURI.file = newURI.file
 | 
						|
        else:
 | 
						|
            resultURI.file = url.file
 | 
						|
        resultURI.path = (HxOverrides.stringOrNull(resultURI.directory) + HxOverrides.stringOrNull(resultURI.file))
 | 
						|
        if (newURI.query is not None):
 | 
						|
            resultURI.query = newURI.query
 | 
						|
        if (newURI.fragment is not None):
 | 
						|
            resultURI.fragment = newURI.fragment
 | 
						|
        resultURI.hash = newURI.hash
 | 
						|
        resultURI.XRF = newURI.XRF
 | 
						|
        xrfragment_URI.computeVars(resultURI)
 | 
						|
        return resultURI
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def cloneURI(url):
 | 
						|
        clonedURI = xrfragment_URI()
 | 
						|
        clonedURI.url = url.url
 | 
						|
        clonedURI.source = url.source
 | 
						|
        clonedURI.scheme = url.scheme
 | 
						|
        clonedURI.authority = url.authority
 | 
						|
        clonedURI.userInfo = url.userInfo
 | 
						|
        clonedURI.password = url.password
 | 
						|
        clonedURI.host = url.host
 | 
						|
        clonedURI.port = url.port
 | 
						|
        clonedURI.relative = url.relative
 | 
						|
        clonedURI.path = url.path
 | 
						|
        clonedURI.directory = url.directory
 | 
						|
        clonedURI.file = url.file
 | 
						|
        clonedURI.query = url.query
 | 
						|
        clonedURI.fragment = url.fragment
 | 
						|
        return clonedURI
 | 
						|
 | 
						|
xrfragment_URI._hx_class = xrfragment_URI
 | 
						|
 | 
						|
 | 
						|
class xrfragment_XRF:
 | 
						|
    _hx_class_name = "xrfragment.XRF"
 | 
						|
    __slots__ = ("fragment", "flags", "index", "x", "y", "z", "shift", "floats", "color", "string", "int", "float", "filter", "reset", "loop", "xrfScheme")
 | 
						|
    _hx_fields = ["fragment", "flags", "index", "x", "y", "z", "shift", "floats", "color", "string", "int", "float", "filter", "reset", "loop", "xrfScheme"]
 | 
						|
    _hx_methods = ["is", "validate", "guessType"]
 | 
						|
    _hx_statics = ["__meta__", "IMMUTABLE", "PROP_BIND", "QUERY_OPERATOR", "PROMPT", "CUSTOMFRAG", "NAVIGATOR", "METADATA", "PV_OVERRIDE", "PV_EXECUTE", "T_COLOR", "T_INT", "T_FLOAT", "T_VECTOR2", "T_VECTOR3", "T_URL", "T_PREDEFINED_VIEW", "T_STRING", "T_MEDIAFRAG", "T_DYNAMICKEY", "T_DYNAMICKEYVALUE", "isColor", "isInt", "isFloat", "isVector", "isUrl", "isUrlOrPretypedView", "isString", "operators", "isProp", "isExclude", "isDeep", "isNumber", "isMediaFrag", "isReset", "isShift", "isXRFScheme", "set", "unset", "toDict"]
 | 
						|
 | 
						|
    def __init__(self,_fragment,_flags,_index = None):
 | 
						|
        self.xrfScheme = None
 | 
						|
        self.loop = None
 | 
						|
        self.reset = None
 | 
						|
        self.filter = None
 | 
						|
        self.float = None
 | 
						|
        self.int = None
 | 
						|
        self.string = None
 | 
						|
        self.color = None
 | 
						|
        self.z = None
 | 
						|
        self.y = None
 | 
						|
        self.x = None
 | 
						|
        self.floats = list()
 | 
						|
        self.shift = list()
 | 
						|
        self.fragment = _fragment
 | 
						|
        self.flags = _flags
 | 
						|
        self.index = _index
 | 
						|
 | 
						|
    def _hx_is(self,flag):
 | 
						|
        if (not Std.isOfType(self.flags,Int)):
 | 
						|
            self.flags = 0
 | 
						|
        return (((self.flags & flag)) != 0)
 | 
						|
 | 
						|
    def validate(self,value):
 | 
						|
        self.guessType(self,value)
 | 
						|
        ok = True
 | 
						|
        if ((len(value) == 0) and (not self._hx_is(xrfragment_XRF.T_PREDEFINED_VIEW))):
 | 
						|
            ok = False
 | 
						|
        if (((not self._hx_is(xrfragment_XRF.T_FLOAT)) and self._hx_is(xrfragment_XRF.T_VECTOR2)) and (not ((Std.isOfType(self.x,Float) and Std.isOfType(self.y,Float))))):
 | 
						|
            ok = False
 | 
						|
        if (((not ((self._hx_is(xrfragment_XRF.T_VECTOR2) or self._hx_is(xrfragment_XRF.T_STRING)))) and self._hx_is(xrfragment_XRF.T_VECTOR3)) and (not (((Std.isOfType(self.x,Float) and Std.isOfType(self.y,Float)) and Std.isOfType(self.z,Float))))):
 | 
						|
            ok = False
 | 
						|
        return ok
 | 
						|
 | 
						|
    def guessType(self,v,_hx_str):
 | 
						|
        v.string = _hx_str
 | 
						|
        _this = xrfragment_XRF.isReset
 | 
						|
        _this.matchObj = python_lib_Re.search(_this.pattern,v.fragment)
 | 
						|
        if (_this.matchObj is not None):
 | 
						|
            v.reset = True
 | 
						|
        if (v.fragment == "loop"):
 | 
						|
            v.loop = True
 | 
						|
        if (not Std.isOfType(_hx_str,str)):
 | 
						|
            return
 | 
						|
        if (len(_hx_str) > 0):
 | 
						|
            _this = xrfragment_XRF.isXRFScheme
 | 
						|
            _this.matchObj = python_lib_Re.search(_this.pattern,_hx_str)
 | 
						|
            if (_this.matchObj is not None):
 | 
						|
                v.xrfScheme = True
 | 
						|
                _hx_str = xrfragment_XRF.isXRFScheme.replace(_hx_str,"")
 | 
						|
                v.string = _hx_str
 | 
						|
            if (len(_hx_str.split(",")) > 1):
 | 
						|
                xyzn = _hx_str.split(",")
 | 
						|
                if (len(xyzn) > 0):
 | 
						|
                    v.x = Std.parseFloat((xyzn[0] if 0 < len(xyzn) else None))
 | 
						|
                if (len(xyzn) > 1):
 | 
						|
                    v.y = Std.parseFloat((xyzn[1] if 1 < len(xyzn) else None))
 | 
						|
                if (len(xyzn) > 2):
 | 
						|
                    v.z = Std.parseFloat((xyzn[2] if 2 < len(xyzn) else None))
 | 
						|
                _g = 0
 | 
						|
                _g1 = len(xyzn)
 | 
						|
                while (_g < _g1):
 | 
						|
                    i = _g
 | 
						|
                    _g = (_g + 1)
 | 
						|
                    _this = v.shift
 | 
						|
                    _this1 = xrfragment_XRF.isShift
 | 
						|
                    _this1.matchObj = python_lib_Re.search(_this1.pattern,(xyzn[i] if i >= 0 and i < len(xyzn) else None))
 | 
						|
                    x = (_this1.matchObj is not None)
 | 
						|
                    _this.append(x)
 | 
						|
                    _this2 = v.floats
 | 
						|
                    x1 = Std.parseFloat(xrfragment_XRF.isShift.replace((xyzn[i] if i >= 0 and i < len(xyzn) else None),""))
 | 
						|
                    _this2.append(x1)
 | 
						|
            _this = xrfragment_XRF.isColor
 | 
						|
            _this.matchObj = python_lib_Re.search(_this.pattern,_hx_str)
 | 
						|
            if (_this.matchObj is not None):
 | 
						|
                v.color = _hx_str
 | 
						|
            _this = xrfragment_XRF.isFloat
 | 
						|
            _this.matchObj = python_lib_Re.search(_this.pattern,_hx_str)
 | 
						|
            if (_this.matchObj is not None):
 | 
						|
                v.x = Std.parseFloat(_hx_str)
 | 
						|
                v.float = v.x
 | 
						|
            _this = xrfragment_XRF.isInt
 | 
						|
            _this.matchObj = python_lib_Re.search(_this.pattern,_hx_str)
 | 
						|
            if (_this.matchObj is not None):
 | 
						|
                v.int = Std.parseInt(_hx_str)
 | 
						|
                v.x = v.int
 | 
						|
                _this = v.floats
 | 
						|
                x = v.x
 | 
						|
                _this.append(x)
 | 
						|
            v.filter = xrfragment_Filter(((HxOverrides.stringOrNull(v.fragment) + "=") + HxOverrides.stringOrNull(v.string)))
 | 
						|
        else:
 | 
						|
            v.filter = xrfragment_Filter(v.fragment)
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def set(flag,flags):
 | 
						|
        return (flags | flag)
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def unset(flag,flags):
 | 
						|
        return (flags & ~flag)
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def toDict(o):
 | 
						|
        return python_Lib.anonToDict(o)
 | 
						|
 | 
						|
xrfragment_XRF._hx_class = xrfragment_XRF
 | 
						|
 | 
						|
Math.NEGATIVE_INFINITY = float("-inf")
 | 
						|
Math.POSITIVE_INFINITY = float("inf")
 | 
						|
Math.NaN = float("nan")
 | 
						|
Math.PI = python_lib_Math.pi
 | 
						|
 | 
						|
haxe_Template.splitter = EReg("(::[A-Za-z0-9_ ()&|!+=/><*.\"-]+::|\\$\\$([A-Za-z0-9_-]+)\\()","")
 | 
						|
haxe_Template.expr_splitter = EReg("(\\(|\\)|[ \r\n\t]*\"[^\"]*\"[ \r\n\t]*|[!+=/><*.&|-]+)","")
 | 
						|
haxe_Template.expr_trim = EReg("^[ ]*([^ ]+)[ ]*$","")
 | 
						|
haxe_Template.expr_int = EReg("^[0-9]+$","")
 | 
						|
haxe_Template.expr_float = EReg("^([+-]?)(?=\\d|,\\d)\\d*(,\\d*)?([Ee]([+-]?\\d+))?$","")
 | 
						|
haxe_Template.globals = _hx_AnonObject({})
 | 
						|
haxe_Template.hxKeepArrayIterator = haxe_iterators_ArrayIterator([])
 | 
						|
python_Boot.keywords = set(["and", "del", "from", "not", "with", "as", "elif", "global", "or", "yield", "assert", "else", "if", "pass", "None", "break", "except", "import", "raise", "True", "class", "exec", "in", "return", "False", "continue", "finally", "is", "try", "def", "for", "lambda", "while"])
 | 
						|
python_Boot.prefixLength = len("_hx_")
 | 
						|
xrfragment_Parser.error = ""
 | 
						|
xrfragment_Parser.debug = False
 | 
						|
xrfragment_URI.__meta__ = _hx_AnonObject({'statics': _hx_AnonObject({'template': _hx_AnonObject({'keep': None})})})
 | 
						|
xrfragment_URI._parts = ["source", "scheme", "authority", "userInfo", "user", "password", "host", "port", "relative", "path", "directory", "file", "query", "fragment"]
 | 
						|
xrfragment_XRF.__meta__ = _hx_AnonObject({'statics': _hx_AnonObject({'toDict': _hx_AnonObject({'keep': None})})})
 | 
						|
xrfragment_XRF.IMMUTABLE = 1
 | 
						|
xrfragment_XRF.PROP_BIND = 2
 | 
						|
xrfragment_XRF.QUERY_OPERATOR = 4
 | 
						|
xrfragment_XRF.PROMPT = 8
 | 
						|
xrfragment_XRF.CUSTOMFRAG = 16
 | 
						|
xrfragment_XRF.NAVIGATOR = 32
 | 
						|
xrfragment_XRF.METADATA = 64
 | 
						|
xrfragment_XRF.PV_OVERRIDE = 128
 | 
						|
xrfragment_XRF.PV_EXECUTE = 256
 | 
						|
xrfragment_XRF.T_COLOR = 8192
 | 
						|
xrfragment_XRF.T_INT = 16384
 | 
						|
xrfragment_XRF.T_FLOAT = 32768
 | 
						|
xrfragment_XRF.T_VECTOR2 = 65536
 | 
						|
xrfragment_XRF.T_VECTOR3 = 131072
 | 
						|
xrfragment_XRF.T_URL = 262144
 | 
						|
xrfragment_XRF.T_PREDEFINED_VIEW = 524288
 | 
						|
xrfragment_XRF.T_STRING = 1048576
 | 
						|
xrfragment_XRF.T_MEDIAFRAG = 2097152
 | 
						|
xrfragment_XRF.T_DYNAMICKEY = 4194304
 | 
						|
xrfragment_XRF.T_DYNAMICKEYVALUE = 8388608
 | 
						|
xrfragment_XRF.isColor = EReg("^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$","")
 | 
						|
xrfragment_XRF.isInt = EReg("^[-0-9]+$","")
 | 
						|
xrfragment_XRF.isFloat = EReg("^[-0-9]+\\.[0-9]+$","")
 | 
						|
xrfragment_XRF.isVector = EReg("([,]+|\\w)","")
 | 
						|
xrfragment_XRF.isUrl = EReg("(://)?\\..*","")
 | 
						|
xrfragment_XRF.isUrlOrPretypedView = EReg("(^#|://)?\\..*","")
 | 
						|
xrfragment_XRF.isString = EReg(".*","")
 | 
						|
xrfragment_XRF.operators = EReg("(^[-]|^[!]|[\\*]$)","g")
 | 
						|
xrfragment_XRF.isProp = EReg("^.*=[><=]?","")
 | 
						|
xrfragment_XRF.isExclude = EReg("^-","")
 | 
						|
xrfragment_XRF.isDeep = EReg("\\*","")
 | 
						|
xrfragment_XRF.isNumber = EReg("^[0-9\\.]+$","")
 | 
						|
xrfragment_XRF.isMediaFrag = EReg("^([0-9\\.,\\*+-]+)$","")
 | 
						|
xrfragment_XRF.isReset = EReg("^!","")
 | 
						|
xrfragment_XRF.isShift = EReg("^(\\+|--)","")
 | 
						|
xrfragment_XRF.isXRFScheme = EReg("^xrf://","") |