Auto applying a template between loader and saver

Moderator: SecondMan

User avatar
ShadowMaker SdR
Fusionista
Posts: 655
Joined: Sun Sep 21, 2014 6:17 am
Answers: 4
Been thanked: 17 times

Re: Auto applying a template between loader and saver

#16

Post by ShadowMaker SdR » Wed Aug 22, 2018 11:23 am

Bryan, you're much more versed in scripting than I am. Can you look over the script I put in my post and see what obvious changes there might have been since its release that prevents it from working in 9.x? It was a really, really useful script and I think it might be quicker to revive/adapt it, than starting from scratch. But unfortunately I have no idea where to start myself.

User avatar
Midgardsormr
Fusionator
Posts: 1215
Joined: Wed Nov 26, 2014 8:04 pm
Answers: 3
Location: Los Angeles, CA, USA
Been thanked: 95 times
Contact:

Re: Auto applying a template between loader and saver

#17

Post by Midgardsormr » Wed Aug 22, 2018 12:18 pm

I don't know if this works. At least it doesn't throw errors any more. We don't use Fusion's render manager, and I'm unwilling to reconfigure my workstation when I don't know what I'm doing, so it didn't actually convert anything for me.

Code: [Select all] [Expand/Collapse] [Download] (Convert Footage.lua)
  1. ------------------------------------------------------------------------------------------------
  2. --      Convert Footage.eyeonscript,Revision 8
  3. --
  4. --
  5. --      Comp script for Eyeon Fusion or Rotation
  6. --
  7. --      by  peter@wwfx.net
  8. --
  9. --      Created Jun 2004
  10. --      Update Nov 03 2005 - Port to Fusion 5
  11. --      Update Jul 20 2006 - include some utility functions and added convertion between all known to fusion fileformats
  12. --      Update Aug 02 2006 - can work without templates, switching views in verbose mode.
  13. --      Update Sep 27 2006 - fixed fusion crash after creating the flows.
  14. --      Update Aug 09 2007 - Can use Fusion Slave or another Full Fusion on the network, to assemble and render comps.
  15. --                 - Can be launched from Rotation and Learning Edition.
  16. --              Update Aug 06 2010 - fixed fusion crash after creating the flows. The last created flow will remain active. Results are printed in console of comp from which script was executed.
  17. --      Update Aug 22 2017 - Port to Fusion 8 by Bryan Ray
  18. --
  19. --      requires:   eyeon.scriptlib, Rotation or Fusion LE
  20. --
  21. ------------------------------------------------------------------------------------------------
  22.  
  23. --[[
  24.  
  25. The script was made to automate creating of reference clips from firewire drives with film footage.
  26. It can be used to search recursive(or not) any folder for footage that Fusion can load
  27. and convert it to any other file format fusion can write to.
  28.  
  29. Some features:
  30.  
  31.     - Template comps. You can to create custom template comps, adjust bc,size,e.t.c. and use them for batch conversions.
  32.     - Can store specific loader's settings and apply them to loaders in generated comps. This is done via list of loader inputs which can be edited (arround line 530, table "keep").
  33.     - Choice for names of new clips and comps. They can be either source sequence name or its folder. Checks for duplicate names and append parent folder to name until it become unique.
  34.     - choosing queue group for created comps and submit them to render master.
  35.     - In verbose mode - current processed footage is displayed on fusion views, while creating the comp..
  36.     - Can create single jpg still from the middle of the sequence.(i.e. for web thumbs)
  37.  
  38. ------------------------------------------------------------------------------------------------
  39.  
  40.     INSTALL
  41.  
  42.     1.  Place Convert footage.eyeonscript in your fusions script directory.
  43.     2.  If using templates - path to template comps must be provided  in ('templates_path' variable)
  44.  
  45. ------------------------------------------------------------------------------------------------
  46.  
  47.     USAGE
  48.  
  49. You can use this without woring about templates, e.t.c. Templates are valuable, when loader must have some special predefined options
  50. i.e, ByPass convertion,spec import modes, also when resizing source footage or modifying it with bc..
  51. When not using templates, simple loader->saver comp will be generated, optionaly with framecounter.
  52. In verbose mode  script prints more info about what is hapening and also shows current sequence in fu views, but that takes more time to finish.
  53. When generating names for new comps and saver clips, there is a check to escape duplicate names.
  54. Name of next parent folder is included to clip name, until name becomes uniqie.
  55. i.e. scanning c:\my docs    for *.jpg and we have found those:
  56.     c:\my docs\folder.jpg
  57.     c:\my docs\band\folder.jpg
  58. I this case output comp and clip names will be set to:
  59.     folder.jpg
  60.     band_folder.jpg
  61. This is only if script find duplicate clip names.
  62. ------------------------------------------------------------------------------------------------
  63.  
  64.     CREATING NEW TEMPLATES
  65.  
  66. Provided template can be customized assuming existing tool names are not changed:
  67. LDR,SQ,JPG,MergeCounter,Counter - those are required by the script.
  68. If you dont need counter, script will work without it and its merge.
  69. The most important to keep are the loader(LDR) and savers(SQ,JPG). Between them you can put any other tools you need.
  70.  
  71. Place new templates in template folder - they will be listed in script dialog so you can choose them from there.
  72.  
  73. If you need to make two quicktimes, leave SQ to be set by script and add saver called MOV, point it to directory of your choice. Script will change only the clipname in the second saver.
  74.  
  75. ]]
  76.  
  77.  
  78. --=========================       CONFIGURATION START    =========================--
  79.  
  80. templates_path = [[X:\rnd\_defaults\templates\fus\]]
  81. --templates_path = Comp:MapPath("Comps:") .. "[ Templates ]" -- i.e. C:\Program Files\Fusion\Comps\[ Templates ]
  82.  
  83. --=========================     CONFIGURATION   END     =========================--
  84.  
  85.  
  86.  
  87. if (not comp) then
  88.     print("--\nConvert Footage is COMPOSITION SCRIPT.\n"
  89.     .."To use it, please move it to:\n"
  90.     ..Fusion():GetPrefs().Global.Paths.Scripts.."\\Comp"
  91.     .."\nopen new comp and look for \"Convert Footage\" in the script menu :)\n--")
  92.     do
  93.         return
  94.     end
  95. end
  96. local addslash  =   function (th)
  97.     if string.sub(th, - 1, - 1) ~= "\\" then
  98.         return
  99.         (th.. "\\")
  100.     else
  101.         return
  102.         th
  103.     end
  104. end
  105. local GetFormats    =   function()
  106.     formats,result,movs = FusionRemote:GetRegList(CT_ImageFormat),{},{}
  107.     for ik  in  pairs(formats)      do
  108.             f,ismovie = formats[ik]:GetAttrs().REGST_MediaFormat_Extension,
  109.                         formats[ik]:GetAttrs().REGB_MediaFormat_CanLoadMulti
  110.             if f then
  111.                 to = table.getn(f)
  112.                 for mm, to in pairs(f) do
  113.                     if (ismovie == true) then
  114.                         table.insert(movs, f[mm])
  115.                     end
  116.                     table.insert(result, f[mm])
  117.                 end
  118.             end
  119.         end
  120.         table.sort(result)
  121.     return
  122.     result, movs
  123. end
  124. local file_exists   =   function(th)  --    for unc, local dirs and files
  125.     if not th then
  126.         return false
  127.     end
  128.     if fileexists(th) then
  129.         return true
  130.     end
  131.     if string.sub(th, - 1, - 1) == "\\" then
  132.          b,s=(string.sub(th, 1, string.len(th) - 1)),(th)
  133.     else
  134.          b,s=th,th.."\\"
  135.     end
  136.     return(direxists(b) or direxists(s))
  137. end
  138. local pm = function(message)    print(string.rep('-', 50),("\n\t" .. message.."\n"))  end
  139. function ScanDir(dir, mask, recursive)
  140.     dir,    maxlen, clips = addslash(dir),  (maxlen or 0),  (clips or {})
  141.     local files = readdir(dir .. '*')
  142.     local tt,   temp = table.getn(files),   {}
  143.     if (tt > maxlen) then
  144.         maxlen = tt
  145.     end
  146.     for i = 1, tt do
  147.         --fi,       e = string.lower(dir .. files[i].Name),     nil
  148.         fi,     e = dir .. files[i].Name,   nil
  149.         if (files[i].IsDir == true and recursive == 1 and files[i].IsSystem == false) then
  150.             ScanDir(fi, mask, recursive)
  151.         else
  152.             string.gsub(fi, "^(.+)(%..+)$", function(n, E) e = E end)
  153.             if (fi and e) then
  154.                 if ((e == mask) or (mask == '*')) then
  155.                     local seq = eyeon.parseFilename(fi)
  156.                     if (eyeon.isin(movs, mask) == true) then
  157.                         t = seq.FullPath
  158.                     else
  159.                         t = seq.CleanName
  160.                     end
  161.                     if (eyeon.isin(temp, t) == false) then
  162.                         printf("%0s %8s", '->', seq.Path .. seq.FullName)
  163.                         table.insert(clips, seq)
  164.                         table.insert(temp, t)
  165.                         t = nil
  166.                     end
  167.                 end
  168.             end
  169.         end
  170.     end
  171.     scanned = (scanned or 0) + 1
  172. end
  173. myscriptprefs = function(op)
  174.  
  175.     local _scriptname=eyeon.split(debug.getinfo(1).source,[[/]])
  176.     local _scriptname=_scriptname[table.getn(_scriptname)]
  177.     local prefname  =   _scriptname..[[.ScriptPrefs]]
  178.  
  179.     cpath   =   fusion:MapPath("Profile:")..([[ScriptPrefs\]])
  180.  
  181.     local cfg       =   cpath..prefname
  182.    
  183.     pm("Using: "..cfg)
  184.    
  185.     if op and op=='write' then
  186.       if not fileexists(cpath) then
  187.         createdir(cpath)
  188.       end
  189.     file,err = io.open(cfg, "w + ")
  190.     if file then
  191.       local h="-- Script preferences for ".._scriptname.."\n-- generated by ".._scriptname.."\n\n"
  192.           file:write(h .. "_cfs = {}\n")
  193.           for i, v in ipairs(_cfs) do
  194.               if (type(v) == "string") then
  195.                   file:write("_cfs[\"" .. i .. "\"]= [["..v.."]]\n")
  196.               elseif (type(v) == "boolean" or type(v) == "number") then
  197.                   file:write("_cfs[\"" .. i .. "\"]= " .. v .. "\n")
  198.               end
  199.           end
  200.       file:close()
  201.       end
  202.       file = nil
  203.     else
  204.       if (fileexists(cfg)) then
  205.           dofile(cfg)
  206.           if (type("_cfs") == nil) then
  207.               return
  208.               {}
  209.           end
  210.       else
  211.           return
  212.           {}
  213.       end
  214.     end
  215. end
  216. function alert(message)
  217.     _ALERT(message)
  218.     ret = comp:AskUser("Alert!", {{"", "Text", Wrap=false, Lines=15,Default = message,Width=2}})
  219.     return ret
  220. end
  221. function getToolPositions(c)  --Fusion 5.2 and up. returns nil if 5.1 or lower
  222.     local positions =   {}
  223.     if not c.CurrentFrame then do return nil end end
  224.     local grid      =   c.CurrentFrame.FlowView
  225.     if not grid then do return nil end end
  226.     local grattr    =   grid:GetAttrs()
  227.     if grattr.VIEWN_Top then
  228.         grid:SetScale(0.5)
  229.         for i, tool in ipairs(c:GetToolList()) do
  230.             name    =   tostring(tool:GetAttrs().TOOLS_Name)
  231.             x,y =   c.CurrentFrame.FlowView:GetPos(tool)
  232.             positions[name]={["x"]=x,["y"]=y}
  233.         end
  234.     return positions
  235.     end
  236.  return nil
  237. end
  238. --========================   end utils
  239. local fta=fusion:GetAttrs()
  240. _cfs={}
  241. pm('local: '..fta.FUSIONS_FileName,' version ',fta.FUSIONS_Version,' with ',_G["_VERSION"])
  242. LocalIsFusion       =   eyeon.isin(split(fta.FUSIONS_FileName,'\\'),'Fusion.exe') and not (fta.FUSIONB_IsDemo==true)
  243. remote = comp:AskUser("", {
  244. {"", "Text", Wrap=true, Lines=3,Default ='Remote or local hostname/IP address with  Fusion or Render Slave to use:',Width=1},
  245. {"host", "Text", Wrap=false, Lines=1,Default ='localhost',Width=1},
  246. })
  247. if not remote then
  248. alert('Script aborted.')
  249.     do return end
  250. end
  251. FusionRemote=Fusion(remote['host'])
  252. if not FusionRemote then
  253.     alert('Can\'t connect to fusion instance')
  254.     do return end
  255. end
  256. local fa=FusionRemote:GetAttrs()
  257. pm(fa.FUSIONS_FileName,' version ',fa.FUSIONS_Version,' with ',_G["_VERSION"])
  258. local o=split(fa.FUSIONS_FileName,'\\')
  259. IsRotation  =   eyeon.isin(o,'Rotation.exe')
  260. IsSlave     =   eyeon.isin(o,'RenderSlave.exe') or eyeon.isin(o,'ConsoleSlave.exe')
  261. IsFusion    =   eyeon.isin(o,'Fusion.exe')
  262. IsVision    =   eyeon.isin(o,'Vision.exe')
  263. --========================
  264. ccomp = fusion.GetCurrentComp() or fusion:GetCurrentComp()
  265. frame = ccomp:GetFrameList()[1]
  266. frame:SwitchMainView('ConsoleView')  -- take users attention.
  267. _cfs,   templates_path, tpl = myscriptprefs('read'),    fusion:MapPath(addslash(eyeon.trim(templates_path))),   {}
  268. local exts,movs = GetFormats()
  269. if table.getn(exts)==0 then
  270. alert('Can\'t get list of file formats, aborting the srcipt!')
  271. do return end
  272. end
  273. exts2=exts
  274. exts2[table.getn(exts) + 1] = '- none -'
  275. if (file_exists(templates_path) == false) then
  276.     _cfs.ut = 0
  277.     _ale=[[The path to templates:\n
  278. --------------------------------------------------\n
  279. ]] .. (templates_path or '') .. [[
  280. --------------------------------------------------\n
  281. set in the beginig of this script is NOT VALID!
  282. If you want to use your own templates:
  283. [1].    Configure script :
  284. ]]..debug.getinfo(1).source..[[
  285. by editing it with text editor.
  286. Type there the path to templates.
  287. [2].    Run the script without templates once.
  288. Simple loader->merge->counter->saver comps will be generated.
  289. Copy those to your templates path. Adjust them to suit your needs,
  290. without changing names of existing tools, so script can find and set them later.
  291. [3]. Run the script again - you should see menu with your template comps.
  292. If you continue script will continue
  293. with creating basic template with loader->saver
  294. ]]
  295.     alert(_ale)
  296. else
  297.     k = readdir(templates_path .. '*.comp')
  298.     if ((table.getn(k)) == 0) then
  299.         alert("No templates found in:\n" .. templates_path .. ".\n\nScript will use internal ones on the fly :)")
  300.         _cfs['ut'] = 0
  301.     else
  302.         for i = 1, table.getn(k) do
  303.             table.insert(tpl, k[i].Name)
  304.         end
  305.     end
  306. end
  307.  
  308. if ((file_exists(_cfs['Destination'])) == false) then
  309.     _cfs['Destination'] = ''
  310. end
  311.  
  312. if ((file_exists(_cfs['flws'])) == false) then
  313.     _cfs['flws'] = ''
  314. end
  315.  
  316. if ((file_exists(_cfs['sequence'])) == false) then
  317.     _cfs['sequence'] = ''
  318. end
  319. if FusionRemote.RenderManager then
  320.     g   =   FusionRemote.RenderManager:GetGroupList() or {'all'}
  321.     else
  322.     g={'all'}
  323. end
  324.  
  325. opts = {
  326.     {
  327.         "sequence",
  328.         Name = "Scan directory:",
  329.         "PathBrowse",
  330.         Default = (_cfs["sequence"]or ""),
  331.     },{
  332.         "recurse",
  333.         Name = "Recurse? ",
  334.         "Checkbox",
  335.         Default = (_cfs["recurse"]or 1),
  336.         Width = 0.5,
  337.     },{
  338.         "mask",
  339.         Name = "Search for:",
  340.         "Dropdown",
  341.         Options = exts,
  342.         Default = (_cfs["mask"]or 17),
  343.     },{
  344.         "sq",
  345.         Name = 'Convert to:',
  346.         "Dropdown",
  347.         Options = exts2,
  348.         Default = (_cfs["sq"]or 0),
  349.     },{
  350.         "Destination",
  351.         Name = "Save clips to:",
  352.         "PathBrowse",
  353.         Default = (_cfs["Destination"]or ""),
  354.     },{
  355.         "ut",
  356.         Name = "Use templates?",
  357.         "Checkbox",
  358.         NumAcross = 2,
  359.         Default = (_cfs["ut"]or 1),
  360.     },{
  361.         "Comps",
  362.         Name = "Template:",
  363.         "Dropdown",
  364.         Options = tpl,
  365.         Default = (_cfs["Comps"]or ""),
  366.     },{
  367.         "compnames",
  368.         Name = "New clip names:",
  369.         "Dropdown",
  370.         Options ={
  371.             'using sequence name',
  372.             'using folder',
  373.             'using parent folder (1 level up)',
  374.         },
  375.         Default = (_cfs["compnames"]or ""),
  376.     },{
  377.         "jpeg",
  378.         Name = "Make JPG still? ",
  379.         "Checkbox",
  380.         Default = (_cfs["jpeg"]or 1),
  381.         Width = 0.5,
  382.     },{
  383.         "jpegs",
  384.         Name = "JPG Width",
  385.         "Slider",
  386.         Default = (_cfs["jpegs"]or 720),
  387.         Integer = true,
  388.         Min = 120,
  389.         Max = 2000,
  390.         Width = 0.5
  391.     },{
  392.         "counter",
  393.         Name = "Make counter? ",
  394.         "Checkbox",
  395.         Default = (_cfs["counter"]or 1),
  396.         Width = 0.5,
  397.     },{
  398.         "flws",
  399.         Name = "Save generated comps in:",
  400.         "PathBrowse",
  401.         Default = (comp:MapPath(_cfs["flws"]) or ""),
  402.     },{
  403.         "QueueNow",
  404.         Name = "Send to RenderManager?",
  405.         "Checkbox",
  406.         Default = (_cfs["QueueNow"]or 0),
  407.         Width = 0.7,
  408.     },{
  409.         "Submit comps paused",
  410.         Name = 'Paused?',
  411.         "Checkbox",
  412.         Default = (_cfs["Paused"]or 1),
  413.         Width = 0.3,
  414.     },{
  415.         "gs",
  416.         Name = 'Use slaves:',
  417.         "Dropdown",
  418.         Options = g,
  419.     },
  420. }
  421.  
  422. ret = comp:AskUser("Convert footage", opts)
  423. if (not ret) then
  424.     pm('Aborting the script..')
  425.     do
  426.         return
  427.     end
  428. end
  429.  
  430. if (table.getn(g)) then
  431.     groups = g[ret.gs + 1]
  432. else
  433.     groups = "local,all"
  434. end
  435.  
  436. ret.Destination,    ret.sequence,   ret.flws =  addslash(comp:MapPath(ret.Destination)),    addslash(comp:MapPath(ret.sequence)),   addslash(comp:MapPath(ret.flws))
  437. if (ret.sequence == [[\]])  or (ret.flws == [[\]])  or (ret.Destination == [[\]]) then
  438.     alert('\n\n\n\tAborting the script, please provide VALID PATHS.')
  439.     do
  440.         return
  441.     end
  442. elseif ((ret.jpeg == 0) and (exts2[ret.sq + 1]== '- none -')) then
  443.     alert('No output format selected.\n\n (sequence or single jpg)\n\nAborting the script.')
  444.     do
  445.         return
  446.     end
  447. elseif ((file_exists(ret.flws)) == false) then
  448.     alert('Folder for saving new comps does not exist!\n' .. ret.flws)
  449.     do
  450.         return
  451.     end
  452. end
  453. _cfs,   mask = ret, exts[ret.mask + 1]
  454. myscriptprefs('write')
  455. if (fusion:GetPrefs().Global.Network.ServerName == 'localhost') then
  456.     fusion.RenderManager:SetAttrs({ RQUEUEB_Paused = true, })
  457.     warnrm = true
  458.     pm('RenderManager : PAUSED.')
  459. end
  460.  
  461. pm('Searching for '..mask..',please wait...')
  462. if FusionRemote.CacheManager then FusionRemote.CacheManager:Purge() end
  463. local t1 = os.time()
  464. ScanDir(ret.sequence, mask, ret["recurse"])
  465. local cl, timescan = table.getn(clips), os.difftime(os.time(), t1)
  466. local secs = math.fmod(timescan, 60)
  467. local mins = (timescan - secs) / 60
  468. local time1 = mins .. 'm. ' .. secs .. 's. '
  469. if (cl > 0) then
  470.     pm(cl .. ' clips found in ' .. scanned .. ' dirs.\n\tTime: ' .. time1 .. '\nLongest clip has '..maxlen..'\nCreating comps, please wait...')
  471. else
  472.     alert('No ' .. mask .. ' files found in \n' .. ret.sequence .. '\nTime to search:' .. time1)
  473.     do
  474.         return
  475.     end
  476. end
  477. local t2,   user = os.time(),   (os.getenv("USERNAME") or '')
  478. local userinfo = user .. ' at ' .. os.getenv("COMPUTERNAME")
  479. if (ret.ut == 0 or (table.getn(tpl) == 0)) then
  480.     pm('Creating base comp..')
  481.     -- NewComp([boolean quiet[, boolean: autoclose[, boolean: hidden]]])
  482.  
  483.     c = FusionRemote:NewComp(true, true, false) or false
  484.     pos =   getToolPositions(c) or nil
  485.     if not c then do return end end
  486.     SetActiveComp(c)    --SetAttrs({ COMPN_GlobalStart = 1, COMPN_RenderStart = 1 })
  487.     Lock()
  488.     UpdateMode = "All"
  489.     LDR = Loader({ Clip = '' })
  490.     LDR:SetAttrs({TOOLS_Name = "LDR"})
  491.     out = LDR.Output
  492.     if pos then
  493.         c.CurrentFrame.FlowView:SetPos(LDR,0.1,1.1)
  494.     end
  495.     if (ret.counter==1 and (not IsRotation)) then
  496.         Counter=TextPlus{ Center = { 0.9, 0.08}, StyledText=TimeCode{Mins = 0, Hrs = 0, Secs = 0, Flds = 0, Frms = 1}}
  497.         Counter:SetAttrs{ TOOLS_Name = "Counter" }
  498.         MergeCounter = Merge({Background = out, Foreground =Counter.Output})
  499.         MergeCounter:SetAttrs({TOOLS_Name = "MergeCounter"})
  500.         out = MergeCounter.Output
  501.         if pos then
  502.             c.CurrentFrame.FlowView:SetPos(MergeCounter,2,1)
  503.             c.CurrentFrame.FlowView:SetPos(Counter,2,2)
  504.         end
  505.     end
  506.     if (not(exts2[ret.sq + 1]== '- none -')) then
  507.         SQ = Saver({Clip = '', Input = out})
  508.         SQ:SetAttrs({TOOLS_Name = "SQ"})
  509.         if pos then
  510.             c.CurrentFrame.FlowView:SetPos(SQ,4,1)
  511.         end
  512.     end
  513.     if (ret.jpeg == 1) then
  514.         RSZ = BetterResize({Width = ret['jpegs'], Input = out, KeepAspect = 1, Comments = 'Web thumb size.'})
  515.         JPG = Saver({Clip = '', Input = RSZ.Output})
  516.         JPG:SetAttrs({TOOLS_Name = "JPG"})
  517.         if pos then
  518.             c.CurrentFrame.FlowView:SetPos(RSZ,3,2)
  519.             c.CurrentFrame.FlowView:SetPos(JPG,4,2)
  520.         end
  521.     end
  522.     for i, tl in ipairs(c:GetToolList()) do
  523.         tl.TileColor = {R = 1,G = 1,B = 1}
  524.         tl.TextColor = {R = 0,G = 0,B = 0}
  525.         tl.Comments = (tl.Comments or '') .. '\ndon\'t change my name please..'
  526.     end
  527. else
  528.     templatecomp = templates_path .. tpl[ret.Comps + 1]
  529.     pm('Loading template: ' .. templatecomp)
  530.     c = FusionRemote:LoadComp(templatecomp, true,true,true) or false
  531.  
  532.     if (c == false) then
  533.         alert('Unable to load template comp\n\nAborting the script.Please check that file exists and all tools can be loaded.')
  534.         do
  535.             return
  536.         end
  537.     end
  538.  
  539.     if ((not c.JPG) and (not c.SQ)) or (not c.LDR) then
  540.         alert('This comp can not be used as template.\n' .. 'There are missing default tools.\n' .. 'Make sure loader witn name LDR present, and saver with name SQ or JPG')
  541.         do
  542.             return
  543.         end
  544.     end
  545.     SetActiveComp(c)
  546.     c:Lock()
  547.     c.UpdateMode,setldr = "All",    {}
  548.     keep ={
  549.         "Import Mode",
  550.         "Process Mode",
  551.         "Hold First Frame",
  552.         "Hold Last Frame",
  553.         "Reverse",
  554.         "Loop",
  555.         "Missing Frames",
  556.         "Depth",
  557.         "Pixel Aspect",
  558.         "Custom Pixel Aspect",
  559.         "First Frame",
  560.         "Make Alpha solid",
  561.         "Invert Alpha",
  562.         "Post-Multiply by Alpha",
  563.         "Swap Field Dominance",
  564.         "Bypass Conversion",
  565.         "Lock R/G/B",
  566.         "Black Level",
  567.         "White Level",
  568.         "Soft Clip (Knee)",
  569.         "Film Stock Gamma",
  570.         "Conversion Gamma",
  571.         "Green Black Level",
  572.         "Green White Level",
  573.         "Green Soft Clip (Knee)",
  574.         "Green Film Stock Gamma",
  575.         "Green Conversion Gamma",
  576.         "Blue Black Level",
  577.         "Blue White Level",
  578.         "Blue Soft Clip (Knee)",
  579.         "Blue Film Stock Gamma",
  580.         "Blue Conversion Gamma",
  581.         "Conversion Table",
  582.         "Frame Render Script",
  583.         "Start/End Render Scripts",
  584.         "Start Render Script",
  585.         "End Render Script",
  586.         "Comments",
  587.         --"Clip List","Load","Replace","Insert","Import","Format Name","Detect Pulldown Sequence"
  588.         --"KeyCode","Time Code Offset","Video Track","Effect Mask",
  589.         --"Global In","Global Out","Trim In","Trim Out","Apply Mask Inverted",
  590.         --"Multiply by Mask","Blank2","Channel","High","Low","Clip","Proxy Filename",
  591.     }
  592.     for i, input in ipairs(c.LDR:GetInputList()) do
  593.         n = input:GetAttrs().INPS_Name
  594.         if (eyeon.isin(keep, n)) then
  595.             table.insert(setldr, i, {['name']= n,['val']= input[TIME_UNDEFINED]})
  596.         end
  597.     end
  598. end
  599. SetActiveComp(c)
  600. pos =   getToolPositions(c) or nil
  601. pm('Creating comps:')
  602. --if not pos then _ALERT('Unable to fetch tool positions. Expect comps with messed tools :-)') end
  603. cnames = {}
  604. if FusionRemote.CacheManager then FusionRemote.CacheManager:Purge() end
  605. for i, fi in pairs(clips) do --main loop
  606.     SetAttrs({COMPN_GlobalStart = 1, COMPN_GlobalEnd = 500000000000})
  607.     to = (c.LDR.Output:GetConnectedInputs())
  608.     c.LDR:Delete()      --grr...
  609.     LDR = c.Loader({Clip = ''})
  610.     LDR:SetAttrs({TOOLS_Name = "LDR"})
  611.     if pos  then c.CurrentFrame.FlowView:SetPos(LDR,pos['LDR'].x,pos['LDR'].y) end
  612.     for i, x in pairs(to) do    x:ConnectTo(LDR.Output) end
  613.     masp=eyeon.split(fi.Path, [[\]])
  614.     for i, line in ipairs(masp) do
  615.         if (tonumber(string.len(eyeon.trim(line))) > 0) then
  616.             folder = line
  617.             parent= masp[i-1]
  618.         end
  619.     end
  620.     if (ret.compnames == 0) then
  621.         shotname = fi.Name
  622.     elseif(ret.compnames ==1 )  then
  623.         shotname = folder
  624.     else
  625.         shotname = parent
  626.     end
  627.     savedcomp = ret.flws .. shotname .. '.comp'
  628.     if (eyeon.isin(cnames, savedcomp) == true) then  --> check if is uniqie.
  629.         a,j = eyeon.split(fi.FullPath,[[\]]),{}
  630.         a[1],a[table.getn(a)] = nil,nil
  631.         for xc, vv in ipairs(a) do
  632.             table.insert(j, vv)
  633.         end
  634.         o = table.getn(j)
  635.         for i, k in ipairs(j) do
  636.             if (j[o + 1 - i]) then
  637.                 shotname = j[o + 1 - i] .. '.' .. shotname
  638.                 savedcomp = ret.flws .. shotname .. '.comp'
  639.             end
  640.             if (eyeon.isin(cnames, savedcomp) == false) then
  641.                 break
  642.             end
  643.         end
  644.     end
  645.     table.insert(cnames, savedcomp)
  646.     c.LDR.Clip[TIME_UNDEFINED] = fi.FullPath
  647.     wait(0.5)
  648.     if (setldr) then
  649.         for g, input in ipairs(c.LDR:GetInputList()) do
  650.             for o, k in ipairs(setldr) do
  651.                 if (k.name == input:GetAttrs().INPS_Name) then                  --print(n,k.val)
  652.                     input[TIME_UNDEFINED] = k.val
  653.                 end
  654.             end
  655.         end
  656.     end
  657.     c:Save(savedcomp)
  658.     att     = c.LDR:GetAttrs()
  659.     start,  frames = att.TOOLNT_Clip_Start[1],  att.TOOLNT_Clip_End[1]
  660.     if (not frames) then
  661.         alert('UNABLE TO LOAD:\n' .. fi.FullPath)
  662.     else
  663.         c.CurrentTime = (math.ceil(frames / 2))
  664.         if (ret.counter==1 and c.Counter and c.MergeCounter) then
  665.             if (IsRotation) then
  666.                 c.Counter:SetAttrs({TOOLB_PassThrough = true})
  667.                 c.MergeCounter:SetAttrs({TOOLB_PassThrough = true})
  668.             else
  669.                 c.Counter.GlobalOut[TIME_UNDEFINED],c.Counter.Width,c.MergeCounter.Width,c.Counter.Height,c.MergeCounter.Height,
  670.                 c.Counter.Enabled3 = frames,att.TOOLIT_Clip_Width[1],att.TOOLIT_Clip_Width[1],att.TOOLIT_Clip_Height[1],att.TOOLIT_Clip_Height[1],1
  671.             end
  672.         end
  673.         if ((not(exts2[ret.sq + 1]== '- none -')) and c.SQ) then
  674.             c.SQ:SetAttrs({TOOLB_PassThrough = false})
  675.             c.SQ.Clip = ret.Destination .. shotname .. string.lower(exts2[ret.sq + 1])
  676.             --if exts2[ret.sq + 1]=='.omf' and (not IsRotation) then
  677.                 --c.SQ.OMFFormat.Codec[0]='AJPG'
  678.                 --c.SQ.OMFFormat.AJPG.CodecVariety[0]='AVR9s'      -- ADD ANOTHER FILE FORMAT DEFAULT SAVER SETTINGS HERE AS ABOVE FOR OMF
  679.             --end
  680.         else
  681.             if c.SQ then
  682.                 c.SQ:SetAttrs({TOOLB_PassThrough = false})
  683.             end
  684.         end
  685.         -- add another default savers here
  686.  
  687.         if c.OMF and (not IsRotation)then
  688.             if exts2[ret.sq + 1]=='.omf' then
  689.                 c.OMF:SetAttrs({TOOLB_PassThrough = true})
  690.                 pm('Skiping OMF saver, because you have SQ set  to the same OMF!')
  691.             else
  692.                 c.OMF.Clip = ret.Destination .. shotname .. '.omf'
  693.                 --c.OMF.OMFFormat.Codec[0]='AJPG'
  694.                 --c.OMF.OMFFormat.AJPG.CodecVariety[0]='AVR9s'
  695.                 pm('Setting omf saver. Format is'..c.OMF.OMFFormat.AJPG.CodecVariety[0])
  696.             end
  697.         end
  698.  
  699.  
  700.         if c.MOV then
  701.  
  702.             local sq1=eyeon.parseFilename(ret.Destination).Path
  703.             local mov1=eyeon.parseFilename(mov.Clip[TIME_UNDEFINED]).Path
  704.       print('Found custom MOV saver'..mov1)
  705.       print('The default one is '..sq1)
  706.  
  707.             if exts2[ret.sq + 1]=='.mov' then
  708.                 if sq1 == mov1 then
  709.         print('TWO SAVERS IN SAME DIR!! - ADDING _CUSTOM TO YOUR CLIP NAME_')
  710.                             c.MOV.Clip = mov1..'_custom_' .. shotname .. '.mov'
  711.                 end
  712.             else
  713.                 c.MOV.Clip = mov1 .. shotname .. '.mov'
  714.             end
  715.         end
  716.  
  717.     if ((exts2[ret.sq + 1]== '- none -') and (ret.jpeg == 1 and c.JPG)) then -- if creating  only JPG's
  718.             c:SetAttrs({ COMPN_GlobalStart = start,COMPN_GlobalEnd = frames * 2, COMPN_RenderStart = c.CurrentTime,
  719.             COMPN_RenderEnd = c.CurrentTime, COMPN_CurrentTime = c.CurrentTime })
  720.         else
  721.             c:SetAttrs({ COMPN_GlobalStart = start, COMPN_GlobalEnd = frames * 2, COMPN_RenderStart = start,
  722.             COMPN_RenderEnd = frames, COMPN_CurrentTime = c.CurrentTime })
  723.         end
  724.         if (ret.jpeg and c.JPG) and (not IsRotation) then
  725.             c.JPG:SetAttrs({TOOLB_PassThrough = false})
  726.             _j = ret.Destination .. shotname .. '.jpg'
  727.             c.JPG.Clip[0]=_j
  728.             if c.JPG.Blend then
  729.                 c.JPG.Blend =  BezierSpline()
  730.                 c.JPG.Blend[start],c.JPG.Blend[c.CurrentTime - 1],c.JPG.Blend[c.CurrentTime],c.JPG.Blend[c.CurrentTime + 1] = 0,0,1,0
  731.                 if c.JPG.ProcessWhenBlendIs00  then     c.JPG.ProcessWhenBlendIs00[1]=0 end
  732.             end
  733.             c.JPG.FrameSavedScript[0] = '\n_j=' .. '[['.._j..']]' ..
  734.             '\nf=Fusion():MapPath(filename)\n' .. 'if(fileexists(f)) then\n' ..
  735.             'h,e=os.rename(f,_j) \n' .. "if h == true then\n" .. "print(filename..' renamed to '.._j)\n" ..
  736.             "else\n" .. "_ALERT(e,'Error renaming '..filename..' please rename it manualy to '.._j)\n" ..
  737.             "end\n" .. "else\n" .. "_ALERT('Still frame NOT RENDERED !')\n" .. "end\n"
  738.         else
  739.             if c.JPG then c.JPG:SetAttrs({TOOLB_PassThrough = true}) end
  740.         end
  741.         ct = c:GetAttrs()
  742.         c:SetPrefs{
  743.             ["Comp.Info.Comments"] = 'Created using ' .. '\tConvert Footage.eyeonscript by ' ..
  744.             userinfo .. ' on ' .. os.date() .. '\n\nSource:\t' .. fi.FullPath ..
  745.             '\n\nClip:\t[' .. i .. ' from ' .. cl .. ']' .. '\n\nDestination:\t' ..
  746.             ret.Destination .. shotname .. '\n\nComp saved:\t' .. savedcomp,
  747.             ["Comp.Info.ModifyDate"] = os.date()}
  748.         c:Save(savedcomp)
  749.         --eyeon.fprint('Clip ' .. i .. '/' .. cl..':' ,fi.Name,ct.COMPN_RenderStart .. '..' .. ct.COMPN_RenderEnd)
  750.         if (ret["QueueNow"]== 1) and fusion.RenderManager then
  751.             job = fusion:QueueComp({ FileName = savedcomp, Start = start, End = frames, QueuedBy = user, Groups = groups })
  752.             if (ret["Paused"]== 1) then
  753.                 job:SetAttrs{RJOBB_Paused = true}
  754.             end
  755.         end
  756.     end --if frames
  757.     collectgarbage()
  758. end -- clips loop
  759. --c:Unlock()
  760. if ccomp then
  761.     SetActiveComp(ccomp)
  762. end
  763.  
  764.  
  765. while c:IsLocked() == true do
  766. print('unlocking..')
  767.    c:Unlock()
  768. end
  769. --c:Close() --for some reason Fusion 6.0, 6.1 crashes here.
  770.  
  771. local totaltime     =   os.difftime(os.time(), t1)
  772.  
  773. if not FusionRemote.RenderManager then
  774.     _ALERT('Script is finished, but generated comps are not submitted to rendermanager.Unable to connect. Please do this manualy.')
  775. end
  776.  
  777.  
  778.  
  779. endmsg='Script Convert Footage Finished!\nSee console for details.'
  780. --eyeon.fprint('Scaned folders:',scanned ,' in '..time1)
  781. --eyeon.fprint('Clips found:',cl)
  782. --eyeon.fprint('Total time:',((totaltime - math.mod(totaltime, 60)) / 60)..'m. '..(math.mod(totaltime, 60))..'s.')
  783. pm('Comps saved in:\t\t'..ret.flws)
  784.  
  785.  
  786.  
  787. if (cl > 0) then    executebg('explorer /e ,' ..ret.flws)end
  788. if (warnrm) then
  789.     fusion.RenderManager:SetAttrs({ RQUEUEB_Paused = false, })
  790. end
  791. collectgarbage()
  792. alert(endmsg)

I just commented out some fprint statements that weren't working because I couldn't divine what was wrong with them at a glance, and I don't have time to dive deep. Most of the other obvious problems were for statements that needed pairs() or ipairs() calls. Also, math.mod() changed to math.fmod() for some reason. Calls to MapPath() needed to be comp:MapPath(), and there were a couple of places where the script didn't test for the existence of a variable before trying to use it.
Last edited by Midgardsormr on Wed Aug 22, 2018 1:45 pm, edited 1 time in total.

User avatar
RBemendo
Fusioneer
Posts: 153
Joined: Fri Dec 12, 2014 11:32 am
Been thanked: 1 time

Re: Auto applying a template between loader and saver

#18

Post by RBemendo » Wed Aug 22, 2018 12:38 pm

got it, changing the node to something other than IN worked just fine. Thanks.

The other thing I run into is that in one of the .setting files I created, there are multiple loaders, so that's messing up the GetPos(LDR) - I'll have to look at a way to name the specific loader I want to align it to.

User avatar
ShadowMaker SdR
Fusionista
Posts: 655
Joined: Sun Sep 21, 2014 6:17 am
Answers: 4
Been thanked: 17 times

Re: Auto applying a template between loader and saver

#19

Post by ShadowMaker SdR » Wed Aug 22, 2018 1:23 pm

Hi Bryan, it's definitely working better already. I can't believe you managed to get this far in such a short amount of time. It's really appreciated.

Now when I run it, it gets stuck at line 230 with the following message:

...ckmagic Design\Fusion\Scripts\Comp\Convert Footage_2.lua:230: attempt to call a table value

What does that mean?

Also, I don't know exactly what you mean by you don't use Fusion's render manager. I think locally there's always a version of the render manager running so you can make a queue (sp?) of all the comps you're running. I don't think there would be a need to reconfigure your system.

User avatar
Midgardsormr
Fusionator
Posts: 1215
Joined: Wed Nov 26, 2014 8:04 pm
Answers: 3
Location: Los Angeles, CA, USA
Been thanked: 95 times
Contact:

Re: Auto applying a template between loader and saver

#20

Post by Midgardsormr » Wed Aug 22, 2018 1:38 pm

That means I missed one of the For statements. Go to that line in the script and where it says for i, tool in c:GetToolList() do, change it to for i, tool in ipairs(c:GetToolList()) do.

In an older version of Lua, used in Fusion 7 and earlier, you could just run a for loop directly on a table. Now you need to use a special iterator function, either pairs() for unordered lists or ipairs() for ordered lists where the order is important. The error message is saying, "Hey, that's a table, but I was expecting a number."

ShadowMaker SdR wrote:
Wed Aug 22, 2018 1:23 pm
Also, I don't know exactly what you mean by you don't use Fusion's render manager. I think locally there's always a version of the render manager running so you can make a queue (sp?) of all the comps you're running. I don't think there would be a need to reconfigure your system.

The script calls the render engine through its network address, but we have Network Rendering disabled for all of our workstations. Thus, the script couldn't reach even the local instance of Fusion.

User avatar
SirEdric
Fusionator
Posts: 1960
Joined: Tue Aug 05, 2014 10:04 am
Answers: 4
Real name: Eric Westphal
Been thanked: 136 times
Contact:

Re: Auto applying a template between loader and saver

#21

Post by SirEdric » Wed Aug 22, 2018 1:40 pm

RBemendo wrote:
Wed Aug 22, 2018 12:38 pm
got it, changing the node to something other than IN worked just fine. Thanks.
"in" and "out" are reserved keywords in Lua.
Although "IN" should be fine, you'll never know...:-)

User avatar
Midgardsormr
Fusionator
Posts: 1215
Joined: Wed Nov 26, 2014 8:04 pm
Answers: 3
Location: Los Angeles, CA, USA
Been thanked: 95 times
Contact:

Re: Auto applying a template between loader and saver

#22

Post by Midgardsormr » Wed Aug 22, 2018 1:44 pm

Nope, temporarily activating the Allow Network Renders switch didn't cause it to do anything, either. Updating the script above with the additional for loop fix.

User avatar
RBemendo
Fusioneer
Posts: 153
Joined: Fri Dec 12, 2014 11:32 am
Been thanked: 1 time

Re: Auto applying a template between loader and saver

#23

Post by RBemendo » Wed Sep 26, 2018 5:23 am

I've been putting some more thought to this concept of auto applying settings to comps to help assistants with common tasks, and automating repetitive tasks. A new approach to this would be to create a .setting file that sets up a generic template for common related tasks. So far on my list of repetative greenscreen shots i've come up with this:

-deNoise
-linearize
-Key/Matte
-deSpill
-transform
-pre-grade

-background generation
-lightwrap
-pixel smoosh
-overall grade
-output

The idea I'm thinking about approaching is being able to create .setting files for each step after the generic .setting file gets everything in place. I sometimes work on projects where the same CGI background and grade is used on 30 comps.

The only thing I can think of for "auto placing" nodes in this type of structure is to use the piperouter numbering system to auto connect in the project. Is there another way I should be thinking about this? Ideally I'd eventually get to the point where once the deNoise, linearize, key/matte is completed I run a CMD line script that applies an approved template for the rest of the flow and sends it to the farm for rendering.

A simple look at my thought process:

Code: Select all

{
	Tools = ordered() {
		Loader1 = Loader {
			Clips = {
			},
			Inputs = {
				["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
			},
			ViewInfo = OperatorInfo { Pos = { -146, 137 } },
		},
		PipeRouter4 = PipeRouter {
			Inputs = {
				Input = Input {
					SourceOp = "LoaderFromSaverofDenoise",
					Source = "Output",
				},
			},
			ViewInfo = PipeRouterInfo { Pos = { 579.799, 114.193 } },
		},
		PipeRouter1 = PipeRouter {
			Inputs = {
				Input = Input {
					SourceOp = "PipeRouter3",
					Source = "Output",
				},
			},
			ViewInfo = PipeRouterInfo { Pos = { 350, 120 } },
		},
		PipeRouter3 = PipeRouter {
			Inputs = {
				Input = Input {
					SourceOp = "Gamut1",
					Source = "Output",
				},
			},
			ViewInfo = PipeRouterInfo { Pos = { 254.839, 120.193 } },
		},
		PipeRouter2 = PipeRouter {
			Inputs = {
				Input = Input {
					SourceOp = "Loader1",
					Source = "Output",
				},
			},
			ViewInfo = PipeRouterInfo { Pos = { -24.7117, 136.723 } },
		},
		Note1_3 = Note {
			Inputs = {
				Comments = Input { Value = "Keying template that auto connects to PipeRouter4 and outputs to PipeRouter5", }
			},
			ViewInfo = StickyNoteInfo {
				Pos = { 788.483, 49.3971 },
				Flags = {
					Expanded = true
				},
				Size = { 196, 179.3 }
			},
		},
		Note1_2 = Note {
			Inputs = {
				Comments = Input { Value = "Loader from saver of preComp Denoising ", }
			},
			ViewInfo = StickyNoteInfo {
				Pos = { 400.099, 10.4079 },
				Flags = {
					Expanded = true
				},
				Size = { 196, 179.3 }
			},
		},
		Note1_1 = Note {
			Inputs = {
				Comments = Input { Value = "Linearize", }
			},
			ViewInfo = StickyNoteInfo {
				Pos = { 42.8783, 66.5852 },
				Flags = {
					Expanded = true
				},
				Size = { 196, 179.3 }
			},
		},
		DeltaKeyer1 = DeltaKeyer {
			Inputs = {
				TuningRanges = Input {
					Value = ColorCurves {
						Curves = {
							{
								Points = {
									{ 0, 1 },
									{ 0.4, 0.2 },
									{ 0.6, 0 },
									{ 1, 0 }
								}
							},
							{
								Points = {
									{ 0, 0 },
									{ 0.4, 0 },
									{ 0.6, 0.2 },
									{ 1, 1 }
								}
							}
						}
					},
				},
				Input = Input {
					SourceOp = "PipeRouter4",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 726.858, 260.131 } },
		},
		LoaderFromSaverofDenoise = Loader {
			Clips = {
			},
			NameSet = true,
			Inputs = {
				["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
			},
			ViewInfo = OperatorInfo { Pos = { 468.496, 229.821 } },
		},
		Saver1 = Saver {
			Inputs = {
				ProcessWhenBlendIs00 = Input { Value = 0, },
				Clip = Input {
					Value = Clip {
						Length = 0,
						Saving = true,
						TrimIn = 0,
						ExtendFirst = 0,
						ExtendLast = 0,
						Loop = 1,
						AspectMode = 0,
						Depth = 0,
						GlobalStart = -2000000000,
						GlobalEnd = 0
					},
				},
				OutputFormat = Input { Value = FuID { "TargaFormat" }, },
				["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
				Input = Input {
					SourceOp = "Denoise",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 462.792, 269.602 } },
		},
		Transform1 = Transform {
			Inputs = {
				Input = Input {
					SourceOp = "PipeRouter5",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 1185.78, 263.923 } },
		},
		MatteControl1 = MatteControl {
			Inputs = {
				Background = Input {
					SourceOp = "DeltaKeyer1",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 864.38, 258.712 } },
		},
		Denoise = ChannelBoolean {
			NameSet = true,
			Inputs = {
				Background = Input {
					SourceOp = "PipeRouter1",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 338.967, 270.252 } },
		},
		Gamut1 = GamutConvert {
			Inputs = {
				SourceSpace = Input { Value = FuID { "Rec709" }, },
				Input = Input {
					SourceOp = "PipeRouter2",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 89, 256 } },
		},
		PipeRouter5 = PipeRouter {
			Inputs = {
				Input = Input {
					SourceOp = "MatteControl1",
					Source = "Output",
				},
			},
			ViewInfo = PipeRouterInfo { Pos = { 1012.76, 103.522 } },
		},
		Note1_4 = Note {
			Inputs = {
				Comments = Input { Value = "Position foreground that auto connects to PipeRouter5 and outputs to PipeRouter6\n", }
			},
			ViewInfo = StickyNoteInfo {
				Pos = { 1142.8, -4.04111 },
				Flags = {
					Expanded = true
				},
				Size = { 196, 179.3 }
			},
		},
		ColorCorrector1 = ColorCorrector {
			CtrlWZoom = false,
			Inputs = {
				ColorRanges = Input {
					Value = ColorCurves {
						Curves = {
							{
								Points = {
									{ 0, 1 },
									{ 0.4, 0.2 },
									{ 0.6, 0 },
									{ 1, 0 }
								}
							},
							{
								Points = {
									{ 0, 0 },
									{ 0.4, 0 },
									{ 0.6, 0.2 },
									{ 1, 1 }
								}
							}
						}
					},
				},
				HistogramIgnoreTransparent = Input { Value = 1, },
				Input = Input {
					SourceOp = "PipeRouter6",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 1489.55, 271.467 } },
		},
		PipeRouter6 = PipeRouter {
			Inputs = {
				Input = Input {
					SourceOp = "Transform1",
					Source = "Output",
				},
			},
			ViewInfo = PipeRouterInfo { Pos = { 1338.06, 102.952 } },
		},
		Note1_5 = Note {
			Inputs = {
				Comments = Input { Value = "Foreground color correction...autoconnects....\n", }
			},
			ViewInfo = StickyNoteInfo {
				Pos = { 1476.1, 81.1617 },
				Flags = {
					Expanded = true
				},
				Size = { 196, 179.3 }
			},
		},
		Merge1 = Merge {
			Inputs = {
				Background = Input {
					SourceOp = "PipeRouter8",
					Source = "Output",
				},
				Foreground = Input {
					SourceOp = "PipeRouter7",
					Source = "Output",
				},
				PerformDepthMerge = Input { Value = 0, },
			},
			ViewInfo = OperatorInfo { Pos = { 1855.11, 104.103 } },
		},
		PipeRouter7 = PipeRouter {
			Inputs = {
				Input = Input {
					SourceOp = "ColorCorrector1",
					Source = "Output",
				},
			},
			ViewInfo = PipeRouterInfo { Pos = { 1687.5, 106.248 } },
		},
		PipeRouter8 = PipeRouter {
			Inputs = {
				Input = Input {
					SourceOp = "ColorCorrector2",
					Source = "Output",
				},
			},
			ViewInfo = PipeRouterInfo { Pos = { 1853.62, 285.276 } },
		},
		lightWrap = ChannelBoolean {
			NameSet = true,
			Inputs = {
				Background = Input {
					SourceOp = "PipeRouter9",
					Source = "Output",
				},
				Foreground = Input {
					SourceOp = "PipeRouter8",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 2070.93, 191.49 } },
		},
		PipeRouter10 = PipeRouter {
			Inputs = {
				Input = Input {
					SourceOp = "lightWrap",
					Source = "Output",
				},
			},
			ViewInfo = PipeRouterInfo { Pos = { 2189.41, 99.6766 } },
		},
		PipeRouter9 = PipeRouter {
			Inputs = {
				Input = Input {
					SourceOp = "Merge1",
					Source = "Output",
				},
			},
			ViewInfo = PipeRouterInfo { Pos = { 1965.82, 99.6766 } },
		},
		Note1_7 = Note {
			Inputs = {
				Comments = Input { Value = "rest of comp auto connects etc.....", }
			},
			ViewInfo = StickyNoteInfo {
				Pos = { 2100.22, 14.0462 },
				Flags = {
					Expanded = true
				},
				Size = { 196, 179.3 }
			},
		},
		PixelSmoosh = ChannelBoolean {
			NameSet = true,
			Inputs = {
				Background = Input {
					SourceOp = "PipeRouter10",
					Source = "Output",
				},
				Foreground = Input {
					SourceOp = "PipeRouter11",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 2310.33, 193.59 } },
		},
		PipeRouter11 = PipeRouter {
			Inputs = {
				Input = Input {
					SourceOp = "PipeRouter8",
					Source = "Output",
				},
			},
			ViewInfo = PipeRouterInfo { Pos = { 2315.62, 322.875 } },
		},
		Note1_6 = Note {
			Inputs = {
				Comments = Input { Value = "background auto connects.....", }
			},
			ViewInfo = StickyNoteInfo {
				Pos = { 1702.94, 628.157 },
				Flags = {
					Expanded = true
				},
				Size = { 196, 179.3 }
			},
		},
		PipeRouter12 = PipeRouter {
			Inputs = {
				Input = Input {
					SourceOp = "PixelSmoosh",
					Source = "Output",
				},
			},
			ViewInfo = PipeRouterInfo { Pos = { 2489.42, 192.193 } },
		},
		ColorCorrector3 = ColorCorrector {
			Inputs = {
				ColorRanges = Input {
					Value = ColorCurves {
						Curves = {
							{
								Points = {
									{ 0, 1 },
									{ 0.4, 0.2 },
									{ 0.6, 0 },
									{ 1, 0 }
								}
							},
							{
								Points = {
									{ 0, 0 },
									{ 0.4, 0 },
									{ 0.6, 0.2 },
									{ 1, 1 }
								}
							}
						}
					},
				},
				HistogramIgnoreTransparent = Input { Value = 1, },
				Input = Input {
					SourceOp = "PipeRouter12",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 2609.32, 298.307 } },
		},
		PipeRouter13 = PipeRouter {
			Inputs = {
				Input = Input {
					SourceOp = "ColorCorrector3",
					Source = "Output",
				},
			},
			ViewInfo = PipeRouterInfo { Pos = { 2760.21, 186.804 } },
		},
		Saver2 = Saver {
			Inputs = {
				ProcessWhenBlendIs00 = Input { Value = 0, },
				Clip = Input {
					Value = Clip {
						Length = 0,
						Saving = true,
						TrimIn = 0,
						ExtendFirst = 0,
						ExtendLast = 0,
						Loop = 1,
						AspectMode = 0,
						Depth = 0,
						GlobalStart = -2000000000,
						GlobalEnd = 0
					},
				},
				OutputFormat = Input { Value = FuID { "TargaFormat" }, },
				["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
				Input = Input {
					SourceOp = "PipeRouter13",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 3014.52, 178.233 } },
		},
		ColorCorrector2 = ColorCorrector {
			Inputs = {
				ColorRanges = Input {
					Value = ColorCurves {
						Curves = {
							{
								Points = {
									{ 0, 1 },
									{ 0.4, 0.2 },
									{ 0.6, 0 },
									{ 1, 0 }
								}
							},
							{
								Points = {
									{ 0, 0 },
									{ 0.4, 0 },
									{ 0.6, 0.2 },
									{ 1, 1 }
								}
							}
						}
					},
				},
				HistogramIgnoreTransparent = Input { Value = 1, },
				Input = Input {
					SourceOp = "Background1",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 1841.67, 653.145 } },
		},
		Background1 = Background {
			Inputs = {
				Width = Input { Value = 1920, },
				Height = Input { Value = 1080, },
				["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
			},
			ViewInfo = OperatorInfo { Pos = { 1839.77, 713.903 } },
		}
	}
}

User avatar
Midgardsormr
Fusionator
Posts: 1215
Joined: Wed Nov 26, 2014 8:04 pm
Answers: 3
Location: Los Angeles, CA, USA
Been thanked: 95 times
Contact:

Re: Auto applying a template between loader and saver

#24

Post by Midgardsormr » Wed Sep 26, 2018 8:02 am

This is a facsimile of the template comp we use at Muse for our 2d prep task:

Code: Select all

{
	Tools = ordered() {
		ARRILogC = CineonLog {
			NameSet = true,
			Inputs = {
				Depth = Input { Value = 1, },
				LogType = Input { Value = FuID { "ARRILogC" }, },
				SLogVersion = Input { Value = FuID { "SLog2" }, },
				Input = Input {
					SourceOp = "NEAT_Video",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 715, 148.5 } },
		},
		NEAT_Video = BrightnessContrast {
			NameSet = true,
			Inputs = {
				Input = Input {
					SourceOp = "SetMetadata1",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 385, 148.5 } },
		},
		SetMetadata1 = Fuse.SetMetaData {
			Locked = true,
			Inputs = {
				FieldName = Input { Value = "Creator", },
				FieldValue = Input { Value = "MuseVFX", },
				Input = Input {
					SourceOp = "LDR",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 220, 148.5 } },
		},
		LDR = Loader {
			Clips = {
			},
			NameSet = true,
			Inputs = {
				["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
			},
			ViewInfo = OperatorInfo { Pos = { 110, 148.5 } },
		},
		CineonLog1 = CineonLog {
			Inputs = {
				Depth = Input { Value = 1, },
				SLogVersion = Input { Value = FuID { "SLog2" }, },
			},
			ViewInfo = OperatorInfo { Pos = { 715, 181.5 } },
		},
		SetTimeCode1 = Fuse.SetMetaDataTC {
			ViewInfo = OperatorInfo { Pos = { 1210, 214.5 } },
		},
		TimeStretcher1 = TimeStretcher {
			Inputs = {
				SourceTime = Input { Value = 0, },
			},
			ViewInfo = OperatorInfo { Pos = { 990, 214.5 } },
		},
		SLog = CineonLog {
			NameSet = true,
			Inputs = {
				Depth = Input { Value = 1, },
				LogType = Input { Value = FuID { "SonySLog" }, },
				SLogVersion = Input { Value = FuID { "SLog2" }, },
			},
			ViewInfo = OperatorInfo { Pos = { 715, 214.5 } },
		},
		Note4 = Note {
			Inputs = {
				Comments = Input { Value = "Denoise. Please don't just use the default settings. Do your best to preserve details by reducing the Luminance amount.", }
			},
			ViewInfo = StickyNoteInfo {
				Pos = { 330, 214.5 },
				Flags = {
					Expanded = true
				},
				Size = { 178.322, 61.2132 }
			},
		},
		Rec709 = GamutConvert {
			NameSet = true,
			Inputs = {
				SourceSpace = Input { Value = FuID { "Rec709Display" }, },
			},
			ViewInfo = OperatorInfo { Pos = { 715, 247.5 } },
		},
		TimeSpeed1 = TimeSpeed {
			ViewInfo = OperatorInfo { Pos = { 990, 247.5 } },
		},
		sRGB = GamutConvert {
			NameSet = true,
			Inputs = {
				SourceSpace = Input { Value = FuID { "sRGB" }, },
			},
			ViewInfo = OperatorInfo { Pos = { 715, 280.5 } },
		},
		null = BrightnessContrast {
			Locked = true,
			NameSet = true,
			Inputs = {
				Input = Input {
					SourceOp = "ARRILogC",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 1540, 148.5 } },
		},
		Note1 = Note {
			Inputs = {
				Comments = Input { Value = "Procedures that *do not* change the frame size go here.", }
			},
			ViewInfo = StickyNoteInfo {
				Pos = { 935, 280.5 },
				Flags = {
					Expanded = true
				},
				Size = { 205.192, 47.7781 }
			},
		},
		Note3 = Note {
			Inputs = {
				Comments = Input { Value = "Linearize your plate.\n\nThe template should be pre-configured for your project, but if there is a question or the conversion looks wrong, consult your supervisor. \n\nIf the conversion is changed from the project default, put the conversion you used in a note in The Grid.", }
			},
			ViewInfo = StickyNoteInfo {
				Pos = { 660, 313.5 },
				Flags = {
					Expanded = true
				},
				Size = { 196, 179.3 }
			},
		},
		PipeRouter1 = PipeRouter {
			Inputs = {
				Input = Input {
					SourceOp = "null",
					Source = "Output",
				},
			},
			ViewInfo = PipeRouterInfo { Pos = { 1705, 82.5 } },
		},
		LensDistort1 = LensDistort {
			ViewInfo = OperatorInfo { Pos = { 1760, 214.5 } },
		},
		Tracker1 = Tracker {
			Trackers = {
				{
					PatternTime = 378,
					PatternX = 0,
					PatternY = 0
				}
			},
			Inputs = {
				Name1 = Input { Value = "Tracker 1", },
			},
			ViewInfo = OperatorInfo { Pos = { 1760, 247.5 } },
		},
		Note2 = Note {
			Inputs = {
				Comments = Input { Value = "Procedures that change the frame size go here.", }
			},
			ViewInfo = StickyNoteInfo {
				Pos = { 1760, 280.5 },
				Flags = {
					Expanded = true
				},
				Size = { 205.899, 32.2218 }
			},
		},
		Crop1 = Crop {
			Inputs = {
				XSize = Input { Value = 1920, },
				YSize = Input { Value = 1080, },
				Input = Input {
					SourceOp = "LensDistort1",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 1870, 214.5 } },
		},
		PlanarTracker1 = Dimension.PlanarTracker {
			Inputs = {
				["Pattern.Polygon"] = Input {
					Value = Polyline {
					},
				},
				Track = Input {
					SourceOp = "PlanarTracker1Track",
					Source = "Value",
				},
				TrackDummy = Input { Value = Matrix { RefTime = 0, IsBogus = true, ToRef = { [0] = 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 } }, },
				StableTrack = Input { Value = Matrix { RefTime = 0, IsBogus = true, ToRef = { [0] = 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 } }, },
			},
			ViewInfo = OperatorInfo { Pos = { 1870, 247.5 } },
		},
		PlanarTracker1Track = BezierSpline {
			SplineColor = { Red = 244, Green = 1, Blue = 129 },
			NameSet = true,
			KeyFrames = {
				[378] = { 0, Flags = { Linear = true, LockedY = true }, Value = Matrix { RefTime = 0, IsBogus = true, ToRef = { [0] = 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 } } }
			}
		},
		null2 = BrightnessContrast {
			Locked = true,
			NameSet = true,
			Inputs = {
				Input = Input {
					SourceOp = "null",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 2200, 148.5 } },
		},
		Background1 = Background {
			Inputs = {
				Width = Input {
					Value = 1920,
					Expression = "null2.Input.OriginalWidth",
				},
				Height = Input {
					Value = 1080,
					Expression = "null2.Input.OriginalHeight",
				},
				["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
			},
			ViewInfo = OperatorInfo { Pos = { 2310, 181.5 } },
		},
		Merge1 = Merge {
			Inputs = {
				Background = Input {
					SourceOp = "null2",
					Source = "Output",
				},
				Foreground = Input {
					SourceOp = "Background1",
					Source = "Output",
				},
				PerformDepthMerge = Input { Value = 0, },
			},
			ViewInfo = OperatorInfo { Pos = { 2310, 148.5 } },
		},
		Gamut1 = GamutConvert {
			Inputs = {
				OutputSpace = Input { Value = FuID { "sRGB" }, },
				Input = Input {
					SourceOp = "Merge1",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 2475, 214.5 } },
		},
		Scale1 = Scale {
			Inputs = {
				XSize = Input { Value = 0.5, },
				PixelAspect = Input { Value = { 1, 1 }, },
				Input = Input {
					SourceOp = "Gamut1",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 2640, 247.5 } },
		},
		originalExr = BrightnessContrast {
			Locked = true,
			CtrlWZoom = false,
			NameSet = true,
			Inputs = {
				Input = Input {
					SourceOp = "PipeRouter1",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 2750, 82.5 } },
		},
		modifiedExr = BrightnessContrast {
			Locked = true,
			NameSet = true,
			Inputs = {
				Input = Input {
					SourceOp = "Merge1",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 2750, 148.5 } },
		},
		fullSizeJpg = BrightnessContrast {
			Locked = true,
			NameSet = true,
			Inputs = {
				Input = Input {
					SourceOp = "Gamut1",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 2750, 214.5 } },
		},
		halfSizeJpg = BrightnessContrast {
			Locked = true,
			NameSet = true,
			Inputs = {
				Input = Input {
					SourceOp = "Scale1",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 2750, 247.5 } },
		}
	}
}

My script detects the presence of those locked BrightnessContrast nodes at the right end by name and connects Savers to them. As you can see, all the potentially useful nodes are present in the template, but they're only wired in as needed. Our project management system prompts the user to select a template when starting a new comp, and the templates can be customized per project.

I don't have all the tools we have at work present on this machine at home, so all of those BC nodes would actually be a NEAT Video and a handful of Null Fuses. In any case, the comp creation script loads the template, the user performs the necessary tasks, connecting the pre-set nodes as needed, then runs the script that creates savers, selecting which processes were performed and which outputs need to be created. The script makes the Savers, configures them, and connects them to the appropriate end point nodes. Then the comp is submitted for render.

User avatar
RBemendo
Fusioneer
Posts: 153
Joined: Fri Dec 12, 2014 11:32 am
Been thanked: 1 time

Re: Auto applying a template between loader and saver

#25

Post by RBemendo » Thu Sep 27, 2018 8:22 am

I haven't dug into it too much, but I wonder if I could utilize SirEdric's "ScriptScript" to create the "templates" within the master template comp for a similar type workflow. Your example is really helpful to keep exploring how to modify my workflow.

User avatar
Midgardsormr
Fusionator
Posts: 1215
Joined: Wed Nov 26, 2014 8:04 pm
Answers: 3
Location: Los Angeles, CA, USA
Been thanked: 95 times
Contact:

Re: Auto applying a template between loader and saver

#26

Post by Midgardsormr » Thu Sep 27, 2018 10:50 am

You definitely can. Here's an example, my own ToolBox script:

Code: [Select all] [Expand/Collapse] [Download] (MuseToolBox.lua)
  1. DEBUG = false
  2. --[[--
  3.     Fusion MuseToolBox
  4.     v1.0 - 2018-07-03
  5.     by Bryan Ray, inspired by ScriptScript by SirEdric on the We Suck Less forums
  6.  
  7.     =====Overview======
  8.  
  9.     Creates a palette of useful script tools and snippets, organized by use case. Customization of the layout is done
  10.     entirely in the global tables CATEGORIES and BUTTONS.
  11.    
  12.  
  13.     =====License======
  14.  
  15.    
  16.     Change log:
  17.         v1.0: First release version. Refactored for ease of update.
  18.         v0.1: Dev version
  19.  
  20.     To Do:
  21.  
  22.         Detect project and create an optional panel for project-specific tools and scripts
  23.  
  24.         Add custom tools: Macros, Fuses, etc
  25.             Maybe in a tab?
  26.  
  27.  
  28. --]]--
  29.  
  30.  
  31.  
  32.  
  33. -- ===========================================================================
  34. -- constants
  35. -- ===========================================================================
  36.  
  37. SEPARATOR = package.config:sub(1,1) -- Folder separator used by the Operating System.
  38. SCRIPT_PATH = 'S:'..SEPARATOR..'BlackMagic'..SEPARATOR..'fusion9'..SEPARATOR..'scripts'..SEPARATOR
  39.  
  40. -- Set up categories here.
  41. CATEGORIES = {
  42.                 { ID = 'IO', Text = 'I/O Scripts', },
  43.                 { ID = 'compMgmt', Text = 'Comp Management', },
  44.                 { ID = 'utility', Text = 'Utility Scripts',  },
  45.                 { ID = 'ref', Text = 'Scripting Reference', },
  46.                 { ID = 'tools', Text = 'MuseTools',  },
  47.             }
  48.  
  49. MAX_COLUMNS = 3     -- Controls how many buttons can appear in each row
  50.  
  51.  
  52.  
  53.  
  54.  
  55. -- ===========================================================================
  56. -- globals
  57. -- ===========================================================================
  58. _fusion = nil
  59. _comp = nil
  60.  
  61.  
  62.  
  63. -- ===========================================================================
  64. -- Functions                  
  65. -- ===========================================================================
  66.  
  67. function main()
  68.  
  69.     -- get fusion instance
  70.     _fusion = getFusion()
  71.  
  72.  
  73.     -- ensure a fusion instance was retrieved
  74.     if not _fusion then
  75.         error("Please open the Fusion GUI before running this tool.")
  76.     end
  77.  
  78.     -- Set up aliases to the UI Manager framework
  79.     ui = _fusion.UIManager
  80.     disp = bmd.UIDispatcher(ui)
  81.    
  82.  
  83.     -- get composition
  84.     _comp = _fusion.CurrentComp
  85.     SetActiveComp(_comp)
  86.  
  87.  
  88. -- Set up buttons here.
  89.  
  90. -- The script field is a path to a script file. Tool scripts require the tool variable to be sent as an argument in a table. The args field handles this.
  91. -- The macro field is a path to the macro .setting file.
  92. -- The popup field activates a pop-up sub-category window.
  93. -- The tool field holds the TOOLS_RegID value for the tool to be added.
  94.  
  95. BUTTONS = {
  96.     { ID = 'fetchRenders', Text = 'Fetch Renders', parent = 'IO', script = [[S:\net_exe\BlackMagic\fusion9\scripts\Comp\MuseTools\MT_fetchRenders.lua]], },
  97.     { ID = 'elementBox', Text = 'Element Box', parent = 'IO', script = [[S:\net_exe\BlackMagic\fusion9\scripts\Comp\z_RnD\ElementBox.py]], },
  98.     { ID = 'twoDPrep', Text = '2d Prep Make Savers', parent = 'IO', script = [[S:\net_exe\BlackMagic\fusion9\scripts\Comp\MuseTools\2dPrep_MakeSavers.lua]], },
  99.     { ID = 'createSaver', Text = 'Create Matte Saver', parent = 'IO', script = [[S:\net_exe\BlackMagic\fusion9\scripts\Comp\z_RnD\createSaver_MT.lua]], },
  100.     { ID = 'submitToDeadline', Text = 'Submit to Deadline', parent = 'IO', script = [[S:\net_exe\BlackMagic\fusion9\scripts\Comp\Submit To Deadline.lua]], },
  101.     { ID = 'versionUp', Text = 'Version Up', parent = 'compMgmt', script = [[S:\net_exe\BlackMagic\fusion9\scripts\Comp\_Versions\.VersionUp.py]], },
  102.     { ID = 'subversionUp', Text = 'Subversion Up', parent = 'compMgmt', script = [[S:\net_exe\BlackMagic\fusion9\scripts\Comp\_Versions\.SubversionUp.py]], },
  103.     { ID = 'versionControl', Text = 'Loaders Version Control', parent = 'compMgmt', script = [[S:\net_exe\BlackMagic\fusion9\scripts\Comp\MuseTools\VersionControl.lua]], },
  104.     { ID = 'batchChangeParams', Text = 'Batch Change Parameters', parent = 'utility', script = [[S:\net_exe\BlackMagic\fusion9\scripts\Comp\MuseVFX\Batch_Change_Parameters.lua]], },
  105.     { ID = 'enableOCL', Text = 'Enable OpenCL All Tools', parent = 'utility', script = [[S:\net_exe\BlackMagic\fusion9\scripts\Comp\MuseVFX\enable_OCL_all_tools.lua]], },
  106.     { ID = 'disableOCL', Text = 'Disable OpenCL All Tools', parent = 'utility', script = [[S:\net_exe\BlackMagic\fusion9\scripts\Comp\MuseVFX\disable_OCL_all_tools.lua]], },
  107.     { ID = 'heatMap', Text = 'Render Time HeatMap', parent = 'utility', script = [[S:\net_exe\BlackMagic\fusion9\scripts\Comp\thirdparty\hos_HeatMap_Ultra.lua]], },
  108.     { ID = 'highlightAnimated', Text = 'Highlight Animated Nodes', parent = 'utility', script = [[S:\net_exe\BlackMagic\fusion9\reactor\Deploy\Scripts\Comp\EyeonLegacy\HighLight Animated.lua]], },
  109.     { ID = 'fuScriptHelp', Text = 'FusionScript Help Browser', parent = 'ref', script = [[S:\net_exe\BlackMagic\fusion9\reactor\Deploy\Scripts\Comp\UI Manager\FusionScript Help Browser.lua]], },
  110.     { ID = 'actionListener', Text = 'Action Listener', parent = 'ref', script = [[S:\net_exe\BlackMagic\fusion9\reactor\Deploy\Scripts\Comp\UI Manager\Action Listener.lua]], },
  111.     { ID = 'toggleHandles', Text = 'Toggle Handles', parent = 'compMgmt', script = [[S:\net_exe\BlackMagic\fusion9\scripts\Comp\MuseVFX\toggleHandles.lua]], },
  112.     { ID = 'precompThis', Text = 'Precomp This', parent = 'IO', script = [[S:\net_exe\BlackMagic\fusion9\scripts\Tool\Muse_PrecompThis.lua]], args = { tool = _comp.ActiveTool } },
  113.     { ID = 'macro2group', Text = 'Macro to Group', parent = 'utility', script = [[S:\net_exe\BlackMagic\fusion9\Reactor\Deploy\Scripts\Tool\Flow\hos_Macro2Group.lua]], args = { tool = _comp.ActiveTool } },
  114.     { ID = 'alexaFilmGrain', Text = 'Alexa Film Grain', parent = 'tools', macro = [[S:\net_exe\BlackMagic\fusion9\macros\museVFX\AlexaFilmGrain.setting]] },
  115.     { ID = 'flexiTrack', Text = 'FlexiTrack', parent = 'tools', macro = [[S:\net_exe\BlackMagic\fusion9\macros\museVFX\MT_FlexiTrack.setting]] },
  116.     { ID = 'madkey', Text = 'MADKey', parent = 'tools', macro = [[S:\net_exe\BlackMagic\fusion9\macros\museVFX\MADKey_BetaD.setting]] },
  117.     { ID = 'lightwrap', Text = 'Fast Lightwrap', parent = 'tools', macro = [[S:\net_exe\BlackMagic\fusion9\macros\museVFX\MT_FastLightWrap.setting]] },
  118.     { ID = 'lensDust', Text = 'Lens Dust', parent = 'tools', macro = [[S:\net_exe\BlackMagic\fusion9\macros\museVFX\MT_LensDust_BETA.setting]] },          
  119.     { ID = 'roughenEdges', Text = 'Roughen Edges', parent = 'tools', macro = [[S:\net_exe\BlackMagic\fusion9\macros\museVFX\MT_RoughenEdges.setting]] },
  120.     { ID = 'softClip', Text = 'Soft Clip Plus', parent = 'tools', macro = [[S:\net_exe\BlackMagic\fusion9\macros\museVFX\MT_SoftClipPlus.setting]] },
  121.     { ID = 'thickener', Text = 'Thickener', parent = 'tools', macro = [[S:\net_exe\BlackMagic\fusion9\macros\Thickener.setting]] },
  122.     { ID = 'glitch', Text = 'Glitch Tools', parent = 'tools', popup = 'glitch', args = { path = [[S:\net_exe\BlackMagic\fusion9\macros\Glitch Effects\]] } },
  123.     { ID = 'updateData', Text = 'Update Comp Data', parent = 'compMgmt', script = [[S:\net_exe\BlackMagic\fusion9\scripts\Comp\MuseVFX\updateData.lua]], },
  124.     { ID = 'ToggleTrackerPaths', Text = 'Toggle Tracker Paths', parent = 'utility', script = [[S:\net_exe\BlackMagic\fusion9\scripts\Comp\MuseVFX\ToggleTrackerPaths.lua]], },
  125.     { ID = 'particleSmoke', Text = 'Wispy Smoke', parent = 'tools', macro = [[S:\net_exe\BlackMagic\fusion9\settings\MuseVFX\wispySmokeParticles.setting]], },
  126.     { ID = 'heatRipple', Text = 'Heat Ripple', parent = 'tools', macro = [[S:\net_exe\BlackMagic\fusion9\macros\museVFX\MT_HeatRipple.setting]], },
  127.     { ID = 'namespaceManagement', Text = 'Namespace Management', parent = 'compMgmt', script = [[S:\net_exe\BlackMagic\fusion9\scripts\Comp\MuseTools\NamespaceManagement.lua]], },
  128. }
  129.  
  130. --  -- ShotClock
  131. --  -- Save Comp As
  132. --  -- Archive Composition
  133. --  -- SplitEXR_Ultra
  134. --  -- Bake Animation
  135. --  -- ExplodeEXR
  136. --  -- Freeze Camera
  137. -- Glitch Tools
  138. -- Subcategories for MuseTools
  139. -- RSCameraExtractor
  140.  
  141.  
  142.     -- -- ensure a composition is active
  143.     -- if not _comp then
  144.     --  error("Please open a composition before running this tool.")
  145.     -- end
  146.  
  147.     if _comp then dprint("\nActive comp is ".._comp:GetAttrs().COMPS_Name) end
  148.  
  149.     local x = nil
  150.     local y = nil
  151.     local width = 400
  152.     local height = 400
  153.  
  154.     -- Create main window
  155.     window = createMainWindow(x, y, width, height, "MuseToolBox", 'main', '<a href="http://wiki/doku.php?id=fusion#custom_tools">Documentation</a>')
  156.     window:Resize({ width, height })
  157.     content = window:GetItems().root:GetItems().content
  158.  
  159.     -- Collate buttons in each category
  160.     for i, category in ipairs(CATEGORIES) do
  161.         category.buttons = {}
  162.         for i, button in ipairs(BUTTONS) do
  163.             if button.parent == category.ID then
  164.                 table.insert(category.buttons, button)
  165.             end
  166.         end
  167.     end
  168.     ddump(CATEGORIES)
  169.     -- Create category headers
  170.     for i, category in pairs(CATEGORIES) do
  171.         local rows = math.ceil(table.getn(category.buttons) / MAX_COLUMNS)
  172.         local pixelSize = 18
  173.         local gap = 5
  174.         if category.suppressGap == true then
  175.             gap = 0
  176.         end
  177.         if category.suppressLabel == true then
  178.             pixelSize = 1
  179.         end
  180.         content:AddChild(ui:VGroup{ ID = category.ID..'Panel', Weight = 0,
  181.             ui:VGroup{ ID = category.ID..'Header', Weight = 0, ui:Label{ ID = category.ID..'Label', Text = category.Text, Font = ui:Font{PixelSize = pixelSize}, }, },
  182.         })
  183.         for i=1, rows do
  184.             content:GetItems()[category.ID..'Header']:AddChild(ui:HGroup{ID = category.ID..i, Weight = 0, })
  185.         end
  186.         content:GetItems()[category.ID..'Header']:AddChild(ui:VGap(10))
  187.         -- Create buttons
  188.         for i, button in ipairs(category.buttons) do
  189.             local parent = button.parent..math.ceil(i/(table.getn(category.buttons)/rows))
  190.             dprint(parent)
  191.             addUIButton(parent, button.ID, button.Text)
  192.         end
  193.     end
  194.  
  195.  
  196.  
  197.     -- Event handlers
  198.  
  199.     -- close events
  200.     function window.On.main.Close(ev)
  201.         disp:ExitLoop()
  202.         status = "Window closed by user."
  203.     end
  204.  
  205.     -- Create Dynamic Event Handlers
  206.     local dynamicFunctions = {}
  207.     for i, button in ipairs(BUTTONS) do
  208.         dynamicFunctions[button.ID] = {}
  209.         dynamicFunctions[button.ID].Clicked = function (ev)
  210.             if button.macro then
  211.                 _comp:DoAction("AddSetting", { filename = button.macro })
  212.             elseif button.popup then
  213.                 dispatcher(button.popup, button.args)
  214.             else
  215.                 _comp:RunScript(button.script, args)    -- Arguments must be passed as a table.
  216.             end
  217.         end
  218.     end
  219.          
  220.  
  221.     for i, func in pairs(dynamicFunctions) do window.On[i] = func end
  222.  
  223.  
  224.     window:RecalcLayout()
  225.  
  226.     window:Show()
  227.     disp:RunLoop()
  228.     window:Hide()
  229.  
  230.     dprint("Script execution successful. Terminating.")
  231.  
  232. end
  233.  
  234. function dispatcher(module, args)
  235.  
  236.     if module == 'glitch' then
  237.         glitchTools(args.path)
  238.     else
  239.         -- do nothing
  240.     end
  241.  
  242. end
  243.  
  244. function glitchTools(path)
  245.     dprint('glitchTools. Path = '..path)
  246.  
  247.     -- Get a list of Glitch Tools
  248.     local files = listFiles(path, '.setting')
  249.     table.sort(files)
  250.     local rows = math.ceil(table.getn(files) / MAX_COLUMNS)
  251.  
  252.  
  253.     local x = 0
  254.     local y = 0
  255.     local width = 500
  256.     local height = 120 + 35 * rows
  257.     glitchWin = createMainWindow(x, y, width, height, 'Glitch Tools', 'glitch', '<a href="http://wiki/doku.php?id=mee_glitch_tools">Documentation</a>')
  258.  
  259.     content = glitchWin:GetItems().root:GetItems().content
  260.  
  261.     -- Generate HTML for logo header
  262.     html = "<html>\n"
  263.     html = html.."\t<head>\n"
  264.     html = html.."\t\t<style>\n"
  265.     html = html.."\t\t</style>\n"
  266.     html = html .."\t</head>\n"
  267.     html = html .."\t<body>\n"
  268.     html = html .."\t<div>\n"
  269.     html = html .."\t<div style=\"float:right;\">\n"
  270.     html = html .. glitchToolsLogo()
  271.     html = html .. "\t</div>\n"
  272.     html = html .. "\t</body>\n"
  273.     html = html .. "</html>"
  274.  
  275.     glitchWin:GetItems().museLogo.HTML = html
  276.     glitchWin:GetItems().museLogo.MinimumSize = {259, 115}
  277.     glitchWin:GetItems().museLogo.MaximumSize = {width * 2, 115}
  278.     glitchWin:GetItems().museLogo.Alignment = { AlignHCenter = true, AlignTop = true, }
  279.     glitchWin:Resize({ width, height })
  280.  
  281.     -- add rows
  282.     for i=1, rows do
  283.         content:AddChild(ui:HGroup{ ID = 'row'..i, Weight = 0, })
  284.     end
  285.  
  286.     -- Add buttons
  287.     local glitchButtons = {}
  288.     for i, file in ipairs(files) do
  289.         local parent = 'row'..math.ceil(i/(table.getn(files)/rows))
  290.         local text = string.gsub(file, 'MT_', '')
  291.         local text = string.gsub(text, 'Glitch_', '')
  292.         local text = string.gsub(text, '.setting', '')
  293.         addGlitchButton(parent, file, text)
  294.     end
  295.  
  296.     -- Create Dynamic Event Handlers
  297.     local dynamicFunctions = {}
  298.     for i, file in ipairs(files) do
  299.         dynamicFunctions[file] = {}
  300.         dynamicFunctions[file].Clicked = function (ev)
  301.             _comp:DoAction("AddSetting", { filename = path..file })
  302.         end
  303.     end
  304.          
  305.  
  306.     for i, func in pairs(dynamicFunctions) do glitchWin.On[i] = func end
  307.  
  308.     -- close events
  309.     function glitchWin.On.glitch.Close(ev)
  310.         glitchWin:Hide()
  311.         status = "Window closed by user."
  312.     end
  313.  
  314.     glitchWin:Show()
  315.  
  316. end
  317.  
  318. function addGlitchButton(parent, ID, name)
  319.     if not name then
  320.         name = ID
  321.     end
  322.  
  323.     local content = glitchWin:GetItems().root:GetItems()[parent]
  324.     content:AddChild(ui:Button{ ID = ID, Weight = 1, Text = name, })
  325. end
  326.  
  327. function addUIButton(parent, ID, name)
  328. --  dprint(parent..", "..ID..", "..name)
  329.     if not name then
  330.         name = ID
  331.     end
  332.  
  333.     local content = window:GetItems().root:GetItems()[parent]
  334.     content:AddChild(ui:Button{ ID = ID, Weight = 1, Text = name, })
  335. end
  336.  
  337.  
  338.  
  339. ------------------------------------------------------------------------
  340. -- getFusion()
  341. --
  342. -- check if global fusion is set, meaning this script is being
  343. -- executed from within fusion
  344. --
  345. -- Arguments: None
  346. -- Returns: handle to the Fusion instance
  347. ------------------------------------------------------------------------
  348. function getFusion()
  349.     if fusion == nil then
  350.         -- remotely get the fusion ui instance
  351.         fusion = bmd.scriptapp("Fusion", "localhost")
  352.     end
  353.     return fusion
  354. end -- end of getFusion()
  355.  
  356.  
  357.  
  358. -------------------------------------------------------------------------
  359. -- listFiles(path)
  360. --
  361. -- Returns a table containing a sorted list of files with the designated
  362. -- extension
  363. --
  364. -- Arguments:
  365. --      path, string
  366. --      extension, string
  367. -- Returns:
  368. --      fileList, table, a list of files found at the end of the path
  369. -------------------------------------------------------------------------
  370. function listFiles(path, extension)
  371.     dprint('listFiles. Path = '..path..', Extension: '..extension)
  372.  
  373.     local fileList = {}
  374.     local data = bmd.readdir(path..'*'..extension)
  375.     for i, file in ipairs(data) do
  376.         table.insert(fileList, file.Name)
  377.     end
  378.     table.sort(fileList)
  379.     return fileList
  380. end -- end of listFolders(path)
  381.  
  382.  
  383.  
  384. --Functions lifted from bmd.scriptlib
  385. -----------------------------------------------------
  386. -- split(strInput, delimit)
  387. --
  388. -- converts string strInput into a table, separating
  389. -- records using the provided delimiter string
  390. --
  391. -----------------------------------------------------
  392. function split(strInput, delimit)
  393.     local strLength
  394.     local strTemp
  395.     local strCollect
  396.     local tblSplit
  397.     local intCount
  398.  
  399.     tblSplit = {}
  400.     intCount = 0
  401.     strCollect = ""
  402.     if delimit == nil then
  403.         delimit = ","
  404.     end
  405.  
  406.     strLength = string.len(strInput)
  407.     for i = 1, strLength do
  408.         strTemp = string.sub(strInput, i, i)
  409.         if strTemp == delimit then
  410.             intCount = intCount + 1
  411.             tblSplit[intCount] = trim(strCollect)
  412.             strCollect = ""
  413.         else
  414.             strCollect = strCollect .. strTemp
  415.         end
  416.     end
  417.     intCount = intCount + 1
  418.     tblSplit[intCount] = trim(strCollect)
  419.  
  420.     return tblSplit
  421. end
  422.  
  423. -----------------------------------------------------
  424. -- trim(strTrim)
  425. --
  426. -- returns strTrim with leading and trailing spaces
  427. -- removed.
  428. --
  429. -- introduced bmd.dfscriptlib v1.0
  430. -- last updated in v1.3
  431. -----------------------------------------------------
  432. function trim(strTrim)
  433.     strTrim = string.gsub(strTrim, "^(%s+)", "") -- remove leading spaces
  434.     strTrim = string.gsub(strTrim, "(%s+)$", "") -- remove trailing spaces
  435.     return strTrim
  436. end
  437.  
  438.  
  439. ------------------------------------------------------------------------------
  440. -- parseFilename()
  441. --
  442. -- this is a great function for ripping a filepath into little bits
  443. -- returns a table with the following
  444. --
  445. -- FullPath : The raw, original path sent to the function
  446. -- Path     : The path, without filename
  447. -- FullName : The name of the clip w\ extension
  448. -- Name     : The name without extension
  449. -- CleanName: The name of the clip, without extension or sequence
  450. -- SNum     : The original sequence string, or "" if no sequence
  451. -- Number   : The sequence as a numeric value, or nil if no sequence
  452. -- Extension: The raw extension of the clip
  453. -- Padding  : Amount of padding in the sequence, or nil if no sequence
  454. -- UNC      : A true or false value indicating whether the path is a UNC path or not
  455. ------------------------------------------------------------------------------
  456. function bmd.parseFilename(filename)
  457.     local seq = {}
  458.     seq.FullPath = filename
  459.     string.gsub(seq.FullPath, "^(.+[/\\])(.+)", function(path, name) seq.Path = path seq.FullName = name end)
  460.     string.gsub(seq.FullName, "^(.+)(%..+)$", function(name, ext) seq.Name = name seq.Extension = ext end)
  461.  
  462.     if not seq.Name then -- no extension?
  463.         seq.Name = seq.FullName
  464.     end
  465.  
  466.     string.gsub(seq.Name,     "^(.-)(%d+)$", function(name, SNum) seq.CleanName = name seq.SNum = SNum end)
  467.  
  468.     if seq.SNum then
  469.         seq.Number = tonumber( seq.SNum )
  470.         seq.Padding = string.len( seq.SNum )
  471.     else
  472.        seq.SNum = ""
  473.        seq.CleanName = seq.Name
  474.     end
  475.  
  476.     if seq.Extension == nil then seq.Extension = "" end
  477.     seq.UNC = ( string.sub(seq.Path, 1, 2) == [[\\]] )
  478.  
  479.     return seq
  480. end
  481.  
  482. --==================================================================================================================
  483. -- UI MANAGER
  484. --==================================================================================================================
  485.  
  486. --=================================================================
  487. -- createMainWindow(x, y, width, height, title)
  488. --
  489. -- Creates a generic UI Manager window featuring the Muse VFX
  490. -- Logo header. There is an empty content container into
  491. -- which other functions can load information.
  492. --
  493. -- Arguments:
  494. --      x, y: Integer. Screen coordinates where window will appear
  495. --      width, height: Integer. Window size in pixels
  496. --      title: String. Window title.
  497. -- Returns:
  498. --      window: UIWindow object
  499. --=================================================================
  500. function createMainWindow(x, y, width, height, title, id, link)
  501.     dprint('createMainWindow')
  502.  
  503.     -- Generate HTML for logo header
  504.     html = "<html>\n"
  505.     html = html.."\t<head>\n"
  506.     html = html.."\t\t<style>\n"
  507.     html = html.."\t\t</style>\n"
  508.     html = html .."\t</head>\n"
  509.     html = html .."\t<body>\n"
  510.     html = html .."\t<div>\n"
  511.     html = html .."\t<div style=\"float:right;\">\n"
  512.     html = html .. museLogo()
  513.     html = html .. "\t</div>\n"
  514.     html = html .. "\t</body>\n"
  515.     html = html .. "</html>"
  516.  
  517.     -- Create the window
  518.     local window = disp:AddWindow({
  519.  
  520.         -- Window properties
  521.         ID = id,
  522.         WindowTitle = title,
  523. --      Geometry = {x, y, width, height},
  524.  
  525.    
  526.         -- Main window container  
  527.         ui:VGroup{
  528.             ID = 'root',
  529.  
  530.             -- The logo header.
  531.             ui:VGroup{
  532.                 ID = 'header',
  533.                 Weight = 0,
  534.                 ui:TextEdit{ ID = 'museLogo', ReadOnly = true, Alignment = { AlignHCenter = true, AlignTop = true, }, MinimumSize = {286, 80}, MaximumSize = {width * 2, 80}, HTML = html, },
  535.             },
  536.            
  537.             -- This holds the dynamic content
  538.             ui:VGroup{
  539.                 ID = 'content',
  540.                 Weight = 2.0,
  541.             },
  542.  
  543.             -- Footer contains the window control buttons
  544.             ui:VGroup{
  545.                 ID = 'footer',
  546.                 Weight = 0.0,
  547.                 ui:HGroup{
  548.                     ID = 'control',
  549.                     Weight = 0.0,
  550.  
  551.                     ui:Label{
  552.                         ID = 'link',
  553.                         Text = link,
  554.                         Alignment = {AlignRight = true, AlignTop = true, },
  555.                         WordWrap = true,
  556.                         OpenExternalLinks = true,
  557.                     },
  558.  
  559.  
  560.        --           ui:HGap(width - 300),
  561.  
  562.        --           ui:Button{
  563.        --               ID = 'cancel',
  564.        --               Text = 'Cancel',
  565.        --           },
  566.  
  567.           --        ui:Button{
  568.           --            ID = 'next',
  569.           --            Text = 'Next',
  570.           --        },
  571.                 },
  572.             },
  573.         },
  574.     })
  575.  
  576.     return window
  577. end
  578.  
  579.  
  580. --================================================
  581. -- Muse VFX Logo encoded in Base 64 for UI windows
  582. --================================================
  583. function museLogo()
  584.     return [[<img src='data:image/png;base64,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'/>]]
  585. end
  586.  
  587. -- Glitch Tools Logo
  588. function glitchToolsLogo()
  589.     return [[<img src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPkAAABiEAYAAADCfqlTAAAgAElEQVR4nOy9f4wk53nn93mre2ZqZmd3anZ3dpvcJbeWP6SW9YMlSzq1fvhYTHR2J2eYrRwPaScCWEwcZIJTwCZgIH2AEZYAI5kgBtQCfEj/oYSlxAlagHJs4nx2G/GZpbNybsvyqWXrR8uiyCK5XPb+rpmdHzXT3fXmj6rqqupZykn+OOmoe4GZnn7rrffn8zzf53ne531HvN9+v/1+W0r+bUhB/FvNfVfR4lwfUOOfgAAtLhflq7NnalxeTavO5Cd/J8/Tz+S3lvkezHqR9CPfXy3OT+oJ4jfUufb9uXx1Nlpm+Umtalx+NDeu6Kk/eycdSzoP2f5m6w/wZ/nJ+INMf5P3tJ/wXjb5+PjxXGXnL9uPZK6S8SZ1RmXUzFwfT+l8MetXvh1/Nlv59UvWIT+faT/U3GeSn+0bmfzse/n6k3qTcalz787T3zvTY761JAW5v+b79k7lflKJ7HpkP6N5nn+a0kV2fOlcBbN5iPKT59qMJubnJ/te8kbKk/PrEdxzPNlZzJZL+S55psXP/dzzdLxqbvxJuXSe1Blt5utPOUWLn87Te9JP9R715nk5nZ/sm/PrnX8nOPY86k0yHj/mDG32TpbHsvImu37zbb1zH1TuNd9pTXlJkvbXj8tqs/cSDtbifpN5ns/5uU/Fn3YH/j+lIPM7JcS8iEmJJy9CsoyTTWoGmtR7lM+Sj0rKvtna1bl60h6m9c0DeFr/vKBLyucFa7Y/WYafFwjZUWiZdvOiNjun924/K6iz407fS2ZGzdUQxIIiqwgl5fP9nl/HtF6fbC/T+UhKJLUm85md5+yIyHxmAVydK3UvAE+B1z9WX758HnD9e/Y0X3++nvz784Lz3nAVvZ+fz3Sm79V+8tdxIZ+K1zwgZFXJ4/1J29Qy70R5WUV3fgTHAVib1RUBfJ7+s/CabS9d93mF4jhfRt/9HP9k4ThLj35mPvLP83yftKdl+g/kuOInKSDZ+qP6/NxzNQNY2fHP038+57hCmJ/BpES2vmSe8wpoli+SeZmXp/naydSWzX/nfiXl5tvJlz9ueuS/H1dAfw7Tvx1APg9E6tyz5Hlq/ZH5K0+4SS0a8ww2b4mllnH6RpbgiXO1OcGVCKV5Cz0RvKrI5md7mRdgyEhQqGKOQKUf16/n5kGdWehZiyeAnOWeBdxE0AQcZ4uo7SzAJ0/nBZSayyfTftq3d1Ijss9TAZZ/950tr2z/7iU60pL3FlDvRE/Z72l/5seVFyspqM4LrnkBlk8++XknXu+sojBvAUal01HeW3DfW+Cpx8vJINNuQCCzitQ7W1ZJ/+dTnq+0uRm7l7WY7VtG4RHzdBS3LuOyIg/s6fMUrLP1leLyyXgD5stpcX8TC/G4yp/yS6pAzLeTn+fs83sDUp5uArLKQPo7K+ey7TGXT+7d7Lzl5/dvA9qsn2qeHpO3ErmX5V8y5fKKQra2dPzZVqPvqUGStJtXRHyy8xLl3HvMP0fpZxvI72U5pIJZnbms5hnoXsCcZ5psPXkCT4DZn8tPBEaqMSYuQk1E5RMBo4msZZFosgmwq6iU5vKz9ScAq6EKnRSw/Zmlqgk9V/8sPwewfkYglzL5KQunLiwy+anFn1o+STvJHOYt7p8sYObt2bS146Iu//68ZU1ufPP2SLakSp52suudBdj5rRAy+dn1SsZMZjypsjSbpxwAp/WmAj+vICT0Nq84QvlYn9I0L9Cz484KwGxL+RnO9gzIKJbxeEWJLD/lPU33AAg535+AdPUyXCuiedXm5oEcnwRz49JmfDYDIKHH5TSyVDLjX1HOzFN2qylqvxSPL4EFP6H5mYIQldPj/vvS5958nMxK1nWe9De7Ttn1T9/Lu/S1GT8GsfxJ5ztL91mqT/LnfWVZvknryKuD84AekKfHbPv3UpiPKwbM+p+lm+y6Zrc+8z3Oy2Xi97LzlShe6QjS7/8u/YwC+b0FVSqmE8LIan5Z8ZUnsLzgz1pyaq68liHxbL35Pb3kLQ1NlOL3Y6AUpSgfPdP7rF6bdc5l4SSfr80JhLymq83Vk/a3NCdw/VihyAvOFPjzs+rjy6RfecGR9jfpXzLuIK5vlBtHXoBFdd8L+Of31ufbmxdU+T3nNOXXOfWg5BWDpJ4sPeTLaXMKTwIws7/nLMB5gc5svfKiRcsJyKygvxewzisWyXjmPRrz66qKd7b8A8jA7byrNRXM8+s2D6y5+tL5jfkgFbx5wElriBTYKM1b6hqlGf1k6SC7NZSMu0TKB/5MoL+ThZxyi5+pJ7Entbi+AF/opApCZmNMlInU3mw7yfiTPvsx4B9vPw9k6ZhTbvFnf2Xn1Z8pCEl9ydN7zc+8ejsvx+YVOjVXI5m/UnmX7dVxiXHc1Z7wdX4c2TGnKUsf9+pF3u9xb4UhP+LjURw/R+lnG8hTUZzmp7nzQJAV/nnNL1uPekyQ3js/BebSTGBAKkA0NMrAiLwmrooYMGTEiCWRAEQkukYxg5bIKxRJ/nFLMC2fVSRGcsQI0EQJPTNWX6bAmgi8CJBGcb4e9z8BqkRTVoWe6U8iYOYFRYZdYxd/Kcf4oxjYk/UqzTwNicU/yikSZFrLK3DHLY0kf55Rk/rz6/lOAJ6sb2k2z7HITlzLs1qywKuiYuT6m4qtlDIy6yfy65t1ZOeAU+T3iNM913z//7YUxBZkGmyVtBP3V5RmykZ+NvNQPW9Zzfop88CR/uS3WvJgEdFHfqVTPs0C1QxGRN4jMk8fKRhG+aWYD1P1MAbAuL+aSNclV8+MT6J+l0TUT19GQaQpnUZvlsh70lLX+wz+hEFeYchapul6+DLbblR3ViEOZu0mCtLfUt+cgjAfGzPPB/n1yYevpgppQof38KyQVVDUuXyfdF3nFfik18FcflQ+MRTmFc55D0NaLlHRkh7kFdSfK0AXP1NR63ndP78XkrVz8iCdEtC8ppkX3ClDl3JtzWv4keWlkQDkLB+IGF4nBfzU2tApk9eU3yk/yOSnwJfkR/Wn+f6sfMTwo1jQJABfmgkCDwji56nlF9WTKBZqLNiIvydAno0ZCIARoxzDzSsWSblUgCcWRCKQIhswdT3mAT4RBMfry6fjUb3znpY05dc/9RAk5WLXagywqUclTz/aTJDpMLN0gzmLdjYvYl4hYFYu+zmvMKbtzAfrpXSVFaHzdHU8Cj7/mZ/DbD9SIM5bskGu/Lygzqu9ab+yfc3S92zV5gBVjflvPvYgC5BZAEroO3kv7fvMJQ6kinG6NRY9H5EH7CxfRM9HeJlxZEP3fCKFOeKbNLgwUtRTus7yTyCi1fTj95IeJgpNUj4Bbm3WdpDkx0CfXfk8YGdlz7xilZWN2ZRVtNRcfuqJzAJjJl+omfWc3wo6HtyaxCiMYn6fjynIjyNLf3mPR3582ZT9nlrmaX6iYP2/UYDfJelnC8iThcwK3oQQ8ouXfqaW5bwlk7g68wycLnCSXxI6WSaIBIYm9GhvWgYzga2TArAX97ZEGSPKFxVgyEgGQBlDmIBGmTIwYIAHGJiYpIK/T58+YFChkhnXIM6vUCHR9INc+fLMEvGAAT26gI4q/Xg2h8CQAf0oPycAvIwASxQcNc4fZfqnxePNCk41Mw9+XM9IDhkApVjgBTJSLEZ4DAA1I6CywJ519c8zfH7N81CVdeDNr29WYM3WM94bTdY/iPOT3dCSiNZRQ6dC5GlJBFgWuBNgSaybVACnAilqN6GXsqjE75Xj9rIenlE838ctn1ShKGXGN79nnN3SIFdD+lde4Cfjmbfc03VJgNIjtUx9RnJIJKC9aD0ZxvVHQJYCQLIKWcBIxpvd+8zSl4YuDLL0FszoMYXCGZ8IHR0d5JBhTP8x/cXlsnzjA31c+pnvBuV4/aPx9HFlB1AZMSRSDBI69OJSQ7JKYT6mJfW06TMDoBT338+se9xvPIYMAV9G9ZZEHPMjo/b9Gd8kKmRi7aaWe8oBxxW9rOWeTfNbOxk6EpGilPKHBpRExA+JohspO+k4Evr1ZTJvCb1F/ffxpUeWXxK6mj+dknhCglkbeSCfV2i1WbnUxCBT8ucKyH82XOvzNkai8WU182yUdZKrZt7KWo7ZetSM4MsCexo0loS1xIAgIkGixgIFYaADBpZoAD461bi+Moiq2BKbIAcMqAMqJeGA2KQtaiAd+jGD16iCaImu6INsSls2iQTTJoi2cIQD0pIWm0BFVFFBtGhhgKzLmqwTCSgLhC02RQ2kJU1ZAkoEcgiiCqIDsiMtGQGcSzt6zgAYMZC9ZKzkLfqIsUqYQJmqsDLjHRFQBmqiKdpEbFcGHLklW0BF9IkAy6ED9EVFbgKqHOAAGr6IBIIn+/E6BGQFf97SOm4BJrSSWopZQMgCdPJ2KV6PaH2TvVA1Ag5RoQ6UqYstABzqQJ8gng9NVABT1LEAI7aoPOnQBvp0pE0ksIaAHitiprCEHQONTSSYXJA9+gAMZnZKBOwGFWGCqGJSBQwMKjEdljLjTSxDDw8PZCJAhwkgJJ4X0iAqn7wgTPgpa5Uln8kWSCLoY6ATGuV4nodx0FeXFsihdKQFePRwgIC+dEgVgFTx0EU8TuqAhkEd8ClhAAMCUQIGqFSAimjQArFJS/QBTVRFA2RH9uQQ6ESKrByJsqjH/NEmAtIySEvW5SbQi+ZDtIUjWkA5UqzkpqzLKuDisAWigRnLB08OQbZlQwJ4dGlCrIRH4++TKqaJHCllFOrYoBAGYGDRiuliM+53pPBURBWoikiR6NCWdcCjig0YoiZ7QCB7tCL6Enq8ahGAazKrCKsZes8qbgl/JD6GrGcolocz4I7K6pFBIsrUAC9eD42m2AIM6mwBHQZx/aaoAZUYUDuiKWtACZ8eoDGQbcCXPWEC4MfziEwUES/T7ywoZz0tWe4PcvkpamQV7fwBwON1vEvTzxKQp/t3iSaZX9B5oE71zQSU5kV/3mJJLDB15jqPNPZkb1uLLesqFuChiSqg08AFURUDBZAtNGogNsVIqQNt0RA20McmADEUVWUAdMSWaAJdWWYLlKbSVSKBXxctkGVZDQ1QuqKrdIE+ZYYgDVkPXVBcRVNckC2p0QA6sh5qoLiio7RAbuLKAHBDPfRBmHQwgIp0pn2gHxphJOhGUgU5lPUwAAY0Y0GjEllYQewC94UKVGjSA6GLtuiCtEEMQGwJQxkCgegrHkgfQ9YAg0jwdjDogTTD5tQFPNmRFlAVLRkBY0tuAoF0hR6tl/TiFYyYNx80l2XwRJNPGFbLlMvq63lLL1LUghjAfUpUgLKwRAcwhS8CYBgL3jZl0Qdqwhc1EAOlothArPRIL3SlDTgQtoA6ZVkD0RQNSoCJLVxgk4GwQbbQRRdwRVU0AYQrSiB8gaiA2KIrBkQWqAGyGwEkTWlIG2SDTSygR19GwFElAMqURQ0YxIBvYlIBYYhKrAhEltJ87EIyU4mr2WMQeWzkkD7IPi49wKUnO0BfdtgCWcWRNlCiI0dARTakAUBZWkCFVtgHkI6I5nkQA3rEbyPKQgdcEQGbISylDGJLqMIGNhkKD3BFWTggNekCyJqoCg2EKprKFihdpaTUgJZ08SA0ZTMcgqzhEYDSEA2lCQKxRQ1kVzrSAVmThjRAmMIQZVD6oiw2QXbCWghIK7RCH4SHJZsgerIcVkDWZCf0gKGshwPAxBMtQGNAB/Ai4AcqwgJRFbYYgnQxGQIuJaUCYqjUlRbQp0ofpCpL6CBcUcEEDFmTgKzIXmgAyKasAIZoyjIwlC1ZJ1IYu4AWKz5+DIjze9GJZyvxDKUxFynwJQp8wh8G4McAXsEVZaAkmkIDelRFD0RHaRYMkC1UmoAlDXQQgWizCbIph6EBONILt4BN2Y08T6ImK4Avu2wC2iwWJ5CDuEcJ9GoZOr1XEFxAnp6zoJ/CdlommPt8FwP6TxfI8xOcBg2RyT9OkMmeeD5Kdt6lOn/cK5gdf4ksIVVErlSfKIipzKZoASWa2EBfmMIB4YigYAEVUVeagCdaSheEXTCKHZCGqCkW0JIVOQJhK3ZRh1CVm2ETpCM3ZQsExcpCG6ZWaIUDkLp0CEC0FvQFYNqcbE16QJsKAShukaIOk/akM2kDNk3qIKzCqGDAdDAJxi7QEKp0QHEUjS2Ydiba2AbRE8NQB7q4YR0YTI3JCCjTlRUQhuzLFsgeHWEBOnV8EJZSVoYgu/QUHygrg6IDQiuMipsQarIh+yB7soINSlk06YC0w+EUkFU6YQBCJbJ86jREpKhErv8SuqwBKr4oE1nog3j9kvXyM9Qx7ypMfn7C3vPM0og+I0FliKbogzCFH3ksREkpAV3hFQYg9EK1WAcxEoPCFsg+FTyYWlNv0ojqC2ugWEqg9EC4eLIBxJa8NERP8YChaCg6EAhV6YNCYVhwQVjCVNogVVnDgbAq62EPwkbYlj2gyxAdhKZUhA1iIGrCAtEUbTEC4YtAjEA0RVNUiLZYNMCKLFLZlX1ZA7p0cYhcyT0ii92bzVnkEi0BVRpUgDYeJigmFg2ghMUIZI+GbAKVsBn2IeyEjYkHkulg4gEN2Z7UgLosY4MYiQo+UKemlEE0RE+owKYwlBHgi4pigdTEQFFBqnREDURD6RWGIDpKr6CCYoueGELYCeuyAVM9rE9HIMq0lE0olheMBReKhlJVKjAxJ/bEhYkRDmQPCkZxUKhAwVAGhS5Mu9POxIFpd+pPh1DQC2WlD0qjWBUOTLfG2lEJpu2wOvGh0FTUggNClfrUA1maGlMD6MtKWAJRw5Q9kB6ecIE+pUghE45igEAZFlyQKhR8kLrYFANQSoV20QTZnTamA5gOQ31ah4KltOkD3rQzHoLU5ShsgxiJIPIYibqIAL0tq0SwFymApRjQR3JEmjJ71TMlOJafIjFotAxf6GIz9jC1xBAIlHLBAjFSrOIQpIeqlABHGSlVUBzRVoCpNvWmFWCTunSBMs1wC6QWemMTRBePHlClRR9wRVnWAVUOEzkvdCLX+5A8YM9b4VGuPxtXkhP9ThUUfzbW+Tezb7wr088GkGu5vOOCO5+fpNTunrfEtfh3KcoV2e+aMKgBxC4vlbrogqiLklIG2RNNEQCmcAoBCLXYXzQh1PCUAOiKcqEHolfsLwxhqobIKhSr6taqB6qxXj7vwVFFWEs+nNo6273vV0A4RXvBgr3Bfid4EdZ7ZzhrwdiZOuEXYX+w39h/AdatdXNdh0ALzEMHgmHQPbBg3V/vrf8Z7PV27V0TDisB+y/C6mipsXAH7qo3/asdODJ3BjcHUPAPrW0Hjtzd0u1NwKESWCCQ5akFBKEbWkCALSsgbNFVysBIdAtlwBLlQgNEvdAu1oDKUme1BaK6bK53YSVYMVZ9UKyF2lIdDpy97i6wqDMcmyDtsREYcFi53b2igmxOtKAClISJBYxkL9ljTc4Xz1yGyXpnLY1s1HF2/bN7yRqp4IqiE8AQFg5QFp5ogdwSpUID6Chm0QahKkbRBcVY3FrRQZor6uktoK40FnRYZdU81YEFb0EvVuGws6v7NRh3Dmp7DoSVwNupgawecVCDor3YV0uwWF9v3N+GaU1oRRWmhjAWfFBGxdaCD0vdBXVRh8Xaor2oQ8Eo1Ao1oB/t9U5HU2+qwaQ1aUy6MGlNWlMHQi/UpzZIX/rSBzmILCtlkx4B0BJt4YHwsGkDNYxYYfXwgA4ODsiSrMUWdYMGyJ7syhqIzWgrSWlHngXFiTxVBURblkEE08ZhAIyOWgddmG4eeNstOOxst6/bIDuhOw1AmsJWaiCsQqNogGgVNhdtULyCW+hA2JIj4cK0FYIFlBa3VjRY0ta8DRtOlU67pS4slU5W1v9LCDbH3tSFoHukHbmgtleM1WfhlL22pX0RxurYHL8AO7WdYMeDgquoymtwqrumrTkQdkMvfC9st+/077wIQpP65EVQLbE1fgkOvDvaNQ/2t24N3qqDKB+ofg1ESfQOSxB2p92jLkhXEgKiRlXUgaGwRRNkU7SLTVDMgrVgACVaigmhvTQ4ZUOhvdo8vQknWic2T6pwpE+sUINJKzD2arC0pbSmA5iUD+ydJhx5fm/UArRQG0d8Y0RbXLI/U8xiqSZ0sltjx6PQEwNJj/kk4nOdGqDjKTpgKDVlC9gUfrEKNBUWVMAR/YINsn8iOOPCcvtU/7QJclPRFiwYb471CbCkFrrhAKadQNsz4XBw176pAcZ+/3YJZFOWpyZRLFOPZJ89AmItx+8JHyfBckmah+F5e3s+JiCv6L/L008XyPMEN+8yT4E7hfbsns7xz0TjjC00kZQvAarQ4z3cTdEGBrEFUlOqBQdQFbPQAdrCK3igjIqjpTIIvzha8kGMFuunPCjVjPITz8Ji7/y3HzVhVz80JjY84F3+wcNrsDeUcuFFCDz5QhF41Hg/l1y4VrlhTy0Yt8aPjy24rF72VB28gff4oQ3nvOKLBRsuaBdfLgI/bv340p4JF6wTL5zQ4VzjvA3wY/2VF+8Ca97anZM2aM4pGxv+RvvrtdcsUPSbz7/6Gtztfcf8gwEE5VdLgwooW8UOBohhOBp7EHYlRxaIBnVZBprCLvQhNERd2QR1eCa4CNy39Sm7/nG4Oyj8ytofwrp1v3tJwhl/47FzL8DbnRvP+xZMrLsv3vbgrv+nz3z5SzD29rSwAdITLQVgREv4wIhNqZP1tJSSqzdiS9qPXZb5aPk0yCVV27TMp08Qn/OO6tNjhUGjLfrAFoGyBQzFsBDAYnCyf3YLNO1D5V95Dcbl0zxiwlJde37jZShpF8wHgBXjlH7ahJvuSF714I3aH7/0v7gg20fWKwYslFbdMy5sVD7g/N1vQ8G/8NgHbQgG4uWlF0DUit6CA6f803LjWdD8M69trIHaV011DSbDiTd+EXabu8/uubCr735x93E4ah05RzbIBo50oKgXny8+DUveor3kwKK1ZC+asLi18MLii1D0i07x26B4ymuKDUpPscTjQJXH41iHNQDZlM9KE0IzfDy8A2EQ3pm+AOPu+IXJ83DUPHrxSIdD//Dpw2/DUSNwD+/AxJ6+HDpw2Pix8eeX4LA5dP6kBWKz2DhsgGIvVJYqINuyHI6AkcJCG0JfGMUmYJ/YOuvDcnCZX3wezvfKP/iYB6eM086Zl+GoEpqKDT6Hd+QXoWieeFbT4ULtsveAC6u9UwDcqN98HOC2e8v1gXVv3dJsOF87b6PDXX3XBLhqXX1624FVVvVV4IJxwSuYsKNtfxHgrd6VJ28Bp3rLLD0GC8YObznwo8Yf2v9zA+7WXy39pQ9Fr9hCB6Uh+gQQNieNsQ2yhyt7oOiKUxyBNEWpWAelt2E8WgO98sSvfO4xWPDW//v7Xbg53HH2noVS/8LLD9yBlerJF84Af9P506+/ZEJgfNf7QwuUYZHABMpiIDaBQbznXKFMhciS7pIqtPNXxKYxJOn9FJBxqccufZ+aaAFD0RVNEFpigRfryx1Ybbyn+WkDLpmf+pXP3oGbpYP/ZvoknBisuaefho12ybxwCd4cvPXFkQUHW99/4l88C4H9N96/1EGUlUpRg9ATdTEABjLaYhoITRqAGgfHpadHAunFY8h65lLFPg/IkVc2GXMqT+bv/M8iybsY0H8WLPK8XZ49zpRfgOOOldQmS1NyvCx1qcdRyVRpAiot4QKe8BQThF/YXHCBUqGzuAlhI+yKHiilYml5Ewqj0uC9NpS0X/rBf/oilBuf+uLHLbhivu0FwMnG0otLJpyz77OEDq9YP3J3gHPmunPKAtnABLhr7ni3HbjoXDQ3gL3urgtw4O67OyZcti/bG8C25psAE3vsHHhwxjljndDhtnPLBJADaU1MONs4a+PCDfeGG5qw1NXs0xZcbnyIyw68aV588r3AtPavXn9Rh6OtYelPbDhq7vZv1wBdDmQThM9QNkA20EQfRFlpLFogfFFXahD0C0+eeBJO8T7vkybo9sP6qg63/dsmALUDHRvutzf0Mw4Mml3rigNjZ6d3owpKSXbGFWAkRtRBtpLoVhEF2SXHk0YMZxp5ieweeRq0lVCDRmp5pPSgxYKqHEf/10UD6AhTtICG0i00QfEWG+oApt3Qkgbs6mMXD+73PiA/bcKD/kP6mgnhIHQA3rLfcg5s2LMnFhYovfALRzaIrWDLr8F0IJoFH3bYd46eh7XGOfO9HpzvnrU2HDhTO+sqOiz4Czo67Gl7NsDNgc8hsK/tm/sWKAPFVjw4UTtrn7fgPKvWggvLxgoA0UYL0MLChok5cQHG9sTEhYkztgEm2sQDGJuhByBboY7JzOslrIKNBQVbMQEW9KINsFxbcHCgqBc9gIKt6AChM/UAjhjrAJ5x7evfs+G2c63nGYARWkctoCvqSguEQb1QgsLmYvmEDxu197gffx7utz/z7f/MgQNr6el1Dw7tsTUxYeprzpoNJeushQv36cIDuKaNzLEDV7pv6TcsWDf20RwomSV7ATjhreiaDW9pV9xbLuxb+9aiBQ+aDzgnXdCdS96aBW/ob1h3bHjd9KwFBx40HmTVggecB50zFlyxrpg3Aa274T3kwC/6/7n93z0NQ/efPdPW4br1F/V/9iUoGLRFGZQGlqhBuDltTg2QvYK5sAmFWrG8VIfJaDKamjApnbTufw0uux/13m/Bgn6N0IOd7ra748GGcd5cdOB0dYMNB/5Gvbb8Wg0K5clgfwSiJr3QA1lHwwagQ0AURV4GRtLL+aaS420+6bGvrKfKJwHIMhZgip7wgC1RVsoghgV9cQtQC95CCQ6rEz+04NTwUe+jT8NKd9ERwDVjZN1xYYWSfQLYsBf0h4Hh1jef+afAoX9z07sGkknzyAJsGQXLNiGOLWjHwYJpDFOswMc0mga7JogQjSdvaaeet/k0H+Tmv0P+uyr9dIA81REhqyndKz89PpZCeUIAWYs8c8XgzBLXAUS0J67TEQ7gibaoAiVlUHABVeiFKshmsbYClDsoylQAACAASURBVJqf8P/hH8JZ5+Fvf8iBmxy+zItwn/bBlz9uwqQRBeMc+Aferg3n9POuasOOvW0CTJl6YxM0T7MAbnVv23iwqC/pyw6sdk/p2HDFftMb63DCPumuWaA6yzYmXB287e7psNbQrHUHCq2CC3DbuuPcseC0f8Zdd0F2pQ3g29ueD5z3zzunLQh1oUeTVPSWbXif/5T9X3twq/Rnj+suvNL8fft3NSg06NED6mF/okJYCfthH5bMU/UzFmxUPun9+vOwZxW9lW/DpdoZb9WBaXcKwE3rJjdtOO+c887asGAeOgcuTAc8ozwHSnmhttgG+uPetA/SpRkLlNLsmFeZKBrey6yjOlu/5Kas1B+jkV3vGbDPYh8MIHGpD2IxUBOq0gHFjDwv0hS9hRIsdd+jPvFtKDkfeOETT8MDXHhhzYZ998AEeNu4qt/SYclT9WUdLjV095IOR+VV7dSzsKehFy/Divqo9ksvwOlu+YsVDy4OLjjnbViuaQ42bDvbHsDt2m1n24SxN2Fsw6qx6pxw4UL3fmddhxXzhAlEniLgUAtMAN/wkRYceAf6AXA0GOtHFkg9dKMYCGEKFxRfsRQXFEc4igfCEbZwQDTwhAM4mNKFsBE60obQiN4PCb3QgdANzVCHeN+dglnwijYssuAumnBCW3WWbVj0Ft0lExZay+9beQKkfdRXalAYrhrrDTgVfMitPgaT0Yp2xoNFv3Tpsgsn/IvWRQ9K5ikbYNffdQCu+dfsbeDHhu9MdNgwNpwzHtzvX7AWLDjVPWVtWPC2MXJ2TAiM152xCxcaF80V4KHGI84ZE67YV9i34TX7dXtHhwdrD+inPLhcu8y6Da833vC2TXjdfMPaBfTaJVYtuGg84J214E3zDeeGCwv2hr5hwQe7/8mlzwODStgOXbg5+Kb9ogELWtFaCkA0hDv2YdqZVsMmnKxc2nyfAfcFn77zH78M24ytIxNuuNeZWlDSSnrBhj17zxHASB+5Ex1UZ9lcdqFYW9JWvgCyPPUCB2iKrnCBKlvCBDwc2SUNUtNEaXbsa0R6fDQ9rx5b5vGx2eSq5xGWqIJoiK6I+KGs6BDWsRnBeR5rf+ZFwHpQfvRxuDG4br3lgc77vYs63PRvWMKCO94dV+qg1TRT2LBQU+1lBw4rSmnhdVCMghuOINSnrXENGNFnRHofhsd8LFN61XXybB4fsgCcwLOWyfGJYp4SkNfm3soqPu+y9NMF8miiU9dQkPmB7GLmXatZACdTNqkv63JNjlWocTR6GwcPlK2F8lIL1NJ9lffZoLQueX/ni/BI89de+y8AaRZdTNjX3ra3TdAapz0suDm4ZU6BJUe1lnRYtlUX4Lp+ncCBVXfFOWHC2N8B4HrtFb5vwcnBsr1kw63uD70dC276b5pv2HDePO+UPLhm7nmLwF37pn7HhHNm2X0/cLt7ywPAE84CsK6vuwA3ue5NbShYBa9gwpq3ZgJc7V7Vj2xQXdVZckDzT1vYsDMou6YHK42/0QZ3YFz9cekbFky0w9aBDkV3ubZagdPVcudTl6BgP3zpUy/Audq6eRpY09d1gDe6V6x9G1bsE+ayDaf9MxbAq42/0m96ILdoKC0oVAtucQDh5riHDlRiQWLGx1Y8PGnl1i7RzGcad3y6QJtdHRvl5z01anx8LqlnFAfFGNSwQbSpihpIlGaxDwvm+cZ7HHjIe+LSrz8O9+sffPoBHa67I3uqw+3WHe+WCRuc887psGFvmLhws3HFDTzYKe3q+8/AUu9M56IDl7ufeu+THpxrvM97L7DT8O2JCVedV6xdE0JfutIFzdE8TYf11jrChKJfNAH2rX0XYORftcfAvnbgHJggHWwBLNQKHjYsd09YKzas+6e9FROWvCUbYMFc8LBANOKthK50AKQZXQ0hCU1ckN14tr3IoseLHJnSkCYWhHZoAxwZhwDsOTvOoQkH+p6zB1wfbLPjgu+Mvv6WBZMgVHkOFtob+iNduND/5AuffRkeav77/LINR+5UAty2bjtjB97iqn1Lh+WGby+bcI5z7ooDD+kPO2vAHeuOjgfXum/pN0y4o13VjxzYqGneSR1Og30AXHVft9/04Pu8RujC/d37rQsmnNZX9FUHrtt77o4Jr+o/cgMLLmkP2+cc0Gs6ay543mvutgme5jl3dbhk6+ZJEy7ULugbDrzVfcu5oUOxseBtePALrdqdf2TBN6tvNL/3JTiqXiv9yIBCq9gWQyj4q6z1oMCD2kf/JyhZH3/28Uug6WMPD65qbznXgFODNc4DF/SLzpoDHp7j6yDNu/quBQutxa8sOnAUHPiiBLLBkACELhpsgXRkcvVzQKK4loFAaDmZmQD6SKaWrUoEoAaRgjsiOpVjgtIqDBYCYGutcbECp0vGpeoLsMYH7A/rcLV2Rb/pwqQx1tHhTPesrTlws3bTu+PC+kCz1oGT1klxyoPtrRD5DBRN0REqUBKOaAN9GR1r1UmO96aWeHYrIAlqy15NnIC1T9aSP3617TxAB3Pf1bn8dxGg/zRd68enPQHzRLBHpRIHST5KPWuZJeWz+f6MgEvJBRNCA4aMcEHZUkoFB9TSg+6H78BJ9WNPfxZYHqyYAG+5V609HU60TliqCUqr4AHsmHeduy6cGZyxNQsCf88CuDEc6K4ORfPOVzwL3uL2l956Dnbca7U3t+F2ly+NL8N4EPj7Aqbu9LnJZ2G7pT633IBJS3qKgEJj2TylQch3dN2FA19xl4EV+7RRssEfCD5jwh390Cl4cM4675324Mg6NAHuWjvOjg0XzYvmWRuCQeAB7Hcn+sQFvfV39X/gwWv9kfuDL8DYP6q/PYBiS1VP6IChsvYCHHmHTmDDg9YZb8GE7W5kWe67++6+Aw/5D+lnbdiN9yR3ujvs6LAwXNSWTAhrY00ZgCzhRsf1cIUKcoQr65n1TK6YjcJbwJfD+f+zHlvoyY1Rswt+Zv8dq0T2Iono2FWFiqiARHoSoI8rarA80vyNFqz6J59fM+GK63mHOux293TfhguNBzhvwVpNcwBGjPQQuO5f1a/qUBwuvL6ow0LtxOCkDbe63/rKSzq8aXx9sLsOh5WjJyY6LG6efGb9WThprz2nObDtLWlLJtxsTQYTB/Yr++6+C4dW8ETgADXhCA+W3KWXlj04ZZ+zLwAXu3/PetIEvIKLC4fakQuw698F4Eg7sscejP2JN/XgEN+85YFf/c5LL9sgB2PrwAI60+4EECO2pQvKQLwkPFBahZpiQtEv1AomiJpshEDoHYl9D2RrYo+BqTX+wpEHU++a9eqHQekIAx+Wvcvex56GsXW//Ys6vN71rB0dNrrn3FMeXDQu6gsWHPqH1hkLrreuOwcevO6/bt52YdVa0hcdEPrI/KENgf/9J/o6vF2+4r9yGV6r737htgYLTWpjEyhN3fF3YGyPy0cCRo78ingJViqn3NMvgWqvG+e7cNRaECdfBt/88/UzLujuR2zThov+o/Z7XXjDvOL6Jrw5eEM/0OGSeclbdmBcGzsbJlztXjVv2HCpe8nZsOHS4JNrT34bftjvui09ii2ZNmF5cKKzVoOQBX3FgquNK49v26B3H7bXdLjrrnqrwFX7bXvbg4e0h+w1HU7XTruaB171u1/Z1UFuMVAApVVoFj0IG1OOtgCVqjAAHV90iSzzGqnimwB6cq/A7AbL5MrZmM+S+yL0qLzckpuyBqIqVNEHRVXdVQsO6kePhybc7yzpeFA0C27Bg9v+LXsMbNjn9QXgBjeQOtz1d20AtbvirAASfqjYQINAGCDM6Jih1NGTezYgw/cj6c1uuEskfuJRTUE7AvwEH9JtgqzhdxzIj1vt+fx/B+T/P9M7aUJ5S3t+NzzvYjk++UlOEtwWzO4ezwK7F1+E4oiO0oOwMu4e6nBb+wvn/xSwF7z2nb98Dg46j1z+yB0o2h8wf9mCh7wPeo/asN/adwBCJ0Q6sORFN7T9sPXStmPCLe0vXv+Dz8KCPmnuXYZJ6WjzoAaiJyuhCuOa0gGY1qfeVAWlHh2HmgyP6jtNmOpTKyyD3Lo7utaEG6PrzR9pMDVDP+zCwaZaPuHBncZfmr//YQi1hdbKNtxxVr9+ahsKg/u1978IZ61P6v+RCavOKujwRutNDnQ44Sx7Sx7cb122fgF4zfvnnO0C9W3zhg7TStDZ1eDt6je2Os/AYv0Hr//fFuxX/qW48HUoNB59/JckPOB/wq1asGgsegBv2m+6Oy6camn6OuC3FE3RYFILu/jAQPiFPlBS9KkKDKfdsErkKUkYckR0M1wkiPyYSYMZA49ILfTjxw3zwT2lGMj7OLIB9KNz9KIyrR1qcLf2A/PlMvyl8bvP/fAZCOuLzpoHD3q/pH/WgxX9Pfp/CHiW5+65cGgduUcmPODrzkMmwF/rpy242vum+68+DGF13Dm0QfGEHjpQGBTa0fFAMRQ+7G2FvrRgakyj8/VmdH2IYimdwutQqBe1wksgTNFTDDhsCk25DNtlZXPBgmvuv37ij74C06qiLdlwSnvssb/3NJwpP+aYLiz6i2bBhmV32YwUzj1LceBN63tf+voXYNrbb90ZAPVx+cAAWZr6RwLkZtidDkBqUg+fANkPW7IJWJhSAzQ5kjbQoClbIBrSDL8OykBpi18HZTPaGz7oD/QXR3CkeevfdGBxdOHy+3U4rH3C+Qc6qJrPKR029A1r1YUHBw/ayzpcd1/Xpy58f/RPn/gnJhzw4/43X4JCabK5/xVQOrI6cUF2Jv1xFQ7dcGsKKCOlI8ogeoqhOKBooSbbsN/e37y1BQE37FcDKHgFr/h1mGyFOl+Cv7b+avOPNFitbjxz4cMQuqAYMGmf+Pq550GU/r69acGDjfdyxoHD7iGnPLjqX/V2HDhtP8rHPDhR3Xj9wQbs9a5VXtMh2LztX3XhiD8f/u/Aj52/Wu+9BDeG94mHXoRHR08+/o9sCBpSX7Dghn3Dlg5sGBu2cGHUXjXXXNjemlrhM6D0ClqxC2jCUmogN6OLhYQRXcwje/RmfNEn3aJKwCkFr8TFPopzInlaRsMnkodtkM50dDSEqTcKvm/C65tfe9324Vb/Ty/rL0HRvF/8ggcT/2PWr+mwYZb0Cx6s1U65axZsWzvegQt4ilMwiS6qeg6kKluKCtiKpjSBblgVQ8CXlfg8uS6tuL/DTN+TrVEfNT6WFsTPUpMuiw/pTYqJVDju1Z1P7yIAT1LhnHnOPGfa9r+R1nbjz1UAJvG3IgGwGy/FKsVYvZigAkVWZy6W6I38TV6gUgQ0zoovEy1gEVjlLI8AZ8XXMIArqKID4inxNfFbwO8p3UIX+Bq/KzQQDfnd6edBPLV+9gEHTvzGI+5HHLjPumCeBG60b5hHdnRMaKELi9UxBwa8Zr781a9+FuRHd0ZXPRDm9OJhD2Rp/N0DG8Rvh9bYBLk6+dyRAaxOV8ctoBGWJi7Ib03tIxP4ctiYVEH8lgymHvC7YX/8FCiv8PmwBOIboTb5KEzYX92uAZOguhPA5Fv7v+obsHf2xu+89VVY2z29dU6F5fJ9g4cNuNG8Wduuwf3a/fqaBke9sQGwXT74KiNY0sJfDT4BR8Vt/Vod5B+HnYkKypXp7iEQTPb6Oz4Uv3HqS+ca8Cif0D5Sg9tbd3yAPXXP3zfhYv2if64Le7r/63fbsDu8Zr26DcpvT546+AbghaVpFVBlRX4e+ABXiNbrFarATTZ5hTyTTYBddvGBYkwXqSdmN17r1Uibn92BP2EVuInPbwI18YoYgvBFSbggJ3yNz8D07NEjgQnFCf3pBIrFE//wdAvuekvBBR+U0qK5pIPOJX1NB8VUTCy4Zl39zg0fDn/rlvHW/wCF3vjLd30ofIsr0zrw5Wl9PILwtyatowAohcZEA6VMOdyFwueV35A6KHX6oQ1SnTbHn4Hwu9Pa0e9BaEy2jtogS9PqxITp7sHmzqcBb/yrQQc2hg/1f8GGR0qV2odsWB2dMIs6LG0tGQCKoeirGhxW9756Fzgq3lC9Q5CPHH757hBEf9oat0H5mvyNcROU35NPTV8B5XfE56dfBuUD0QUviksp/BaIsjSmbeBz0g+vAK/IXvjbIHX5G+FZCMvT35xaIFen5fFTcP6p9539O124bFYanxzA1Az1ggs31OvmnQbs9fZsoYHw71q3HLh79ruX/8UXYHzF//TbLZDto8leB6Q1/fShDSIIXzkaAJ8LjfEqyOq0P34K+O2Jc1QH8WX51KQNQgs3p58BeXOqjlWQ7XBr8gEodMVEAuFvHrX3vgGHI//3bvwxyO8Gj9wdAV/b/93tL8DOK3eWb1dh5VsXGr8InG9ecJYM8Bt+7agGQXlqSRPWP3BG22jB/ueu3/fGh2Fc2fvjO4ACu2Ebwt858vaHEHxm3997As4N36t+zIFTtQu1Cw5cN65rt4C1wanGigGLnSVNa8Ht0tVrr9sg7R37+q+D/M3Jl4M20A1/c9oDfl+U+R0AarSBm7xCLeaH1VgKRhb4LhPgLBoXgezNbkVA5wPi94EJtrCBX2VIE5TfU4ZKA2R3Yo77MJ7s9++2YXGyPFz9r0D57Y3ywyVY9rTWeRNO+ic1xYKbg5vduw6s1FfMVQOmxu6Xbt8H+8aNweufAcWUbvgt4Gtyc1oBqrIuXwEucoVPAz6f41sA+NyMZXeEBzdpABOKMW5MYvkfjW9CET+WEcX4J/mbWG5ApAgU478SxEmR512T/s0O5Z00oZ9kaaeaVRrkljxN94Wyb8SWu0jOI1bip5HlZsSuHUtGlsdIqUbHkjDpwVH5sHa4Bidt7eXTHoReaKHDnrnr7ppw3jhvnrahYApvCVguP+x/3Aa2bjved2Bs+PrtCmCE3bEOOLIk6yCb0g+T3vpAnQomyC3qVEBUIoaSFdmYuiC7sscgsjxEGUJj2h2XgIqoCBMoCT3UIDSOSqEJwggrGHCz863n/rkHC8Hlb38YWOmueCc8WGHFRofX/Ffduw7c1/2I9cs6rHrGy596Af7K/N/Ef/thOLC93l8Ogaq0whJM2ofNAw8Kjf3aDR3CdvgkwC3vpnvbhA1nwz7tQZElE2BpYMhf0+H+ykpVs+G68Ue91ldhYoxrwRZgigZtQJNVWoCXrGvyX+JmN8X7s+jbvCWeP04yf9d4cpdzElCjSUdWQJZDdzoChpREB4r1hb4IQNphb6LBjd6r5e9+BS63PmL96uOg65e9VWDf2/MArrTeNG+bcFp/TP8MUHIvOLoLHi+5/6OAXe+K+30PsKmHGghDWjIA2qJN5ApVAWRzMsKG0ItiNQgIsKMLY8QIREVY0cUiqLINSpVuUQOpTd3DFtyovPLMX1uw2H/N/Q+AsTO2DnSQdmiGJmBCwYVl90PP/n0PDkqHT0wc2LG+4b7QB5qT8oEKlEJrUgY0acUXilQwIT6qBka0R8sAjQqItqhSBwxG0cU6lJUAZE0pCWDcP6ocNuF2y29sW7BhRPN23j5vFRxY9zTzDHCte10/cuCONbEXTVhpPOxVvggBI+tHAxirB/ZhGWQp1CYlkJb0wzqIBlvSATGQDjWQbTZlDWQ5tOPgrU18EC6qiPI74zKE5WldMUGpKCUFCAdQGMG0ETRlE4pOoVp04ZBXOn/2Oryhf8/5uAUr+rr3CQ8u2hftkx68OvgxN004635Q//dM+AXn/GsPO/Bd43/t/uMBHLVvW2/qsGAud07W4NA5qO34MOLH7veAD3UNuwxsu767bMGoMbL2PHiwqzuaDReHv/zFTRtG9T95buF5CLrfG/xBAFNjYh7WgYEMGALl+A75EcP4nzElV+LG/xtiZqkmN7hpsdcrsWyjK2bLeLINuNKXJZCN0J9aIEaFUbgJYT10JyMYm74+MuCkMXEPngVf37YDEzRnzVRNWKot6gtAwTnFexx4r/vUk//YgYH+wkv+SxC0X2322yBcOqIa861JdJ68BLP/aTGSg0wAXMrfqcWdJHXmXk/y/XjEkJcOyTtB5ne2pnfRXvlPUyd5p1CE5Gn+u8Zx13tWkM//m8rkAph0Dz26UKFMUwxB1vBED0RJduUWFNwThmbBcv/y87/4GKxV1lnSo+NBALIrUFyQzl12TPhh9f967v8Atuv/Wvzhl6DQONS3/x/23j1Wkuu+8/uc6u57677m1rzEnuGQU3xIakmU2LQkqxXRZlH2rtq2YjYD7boRKGARMTatvNQCFKADCGApUIDehQK2AG/QTmSwiJWyvRt5WQyUuCXRYjGm7JYsi0WLpNriY84MZzg9r3vrvuv2o07+qOr7GFIxkD8srDYHGN57T9W97Krz+L2+5/u1QDWUM6kBusrHPcBSPRUCVVWJbRAFpoQ0iaFyKKepsSJlUG3VSQhT0hJBNy4LF5RHeyJBFIWltQAmfeFCXFPQBVHVjFwZRHumNm/CZmPj2U0LTG6VJ/0ERAUQubvm0IEZuW5eseA19y+e7FiwbV9svvwcZO1sPtOFiTsOxiYImdVngBPlOz/1IQk3uOHEPmRaWTMDHHWPOQCX/HPmhg8r1b968d8C4+B14/kvw8Qeh6MCCeglD8JWrpCg2nRVKR0nk0SkYgCpcMJBrMRhWcb9hZo/tODDFNwz3Rimohc9XOpAiK9aIMxEnEKZcXVSglFxN4i6cNK9PSw8AWerd5vmA7BurtkAbwVv+dcdOFJcsBcAgov2Tx043/z+2jcehI3WoPZGCMIWec0E4St90geqFOMIqMVVFYHq4dFmj7lPlCjRBEopp32BHi5QUygfVA9dlGBcHPWGTVB51coWYLF9W/G9Lix5S4/pFuhh8vgzcsYHGFUSzMKFyrNr/7sPo+Irre88BxmfYpwHZdJWPVBVqqoOdFUrLgP95Fw0A3p0QLkpI1w4ff+qKXygICLNBwIM0QStShMPFvy8NAPI9z700G8+C9eNFdZ8WCmGprIg7+Ytw4al+sgMJVzu/uUd3wTC4kvW988Dvchbq4MoU1ZFEI5qxS6ogmrGHqiG8lQEoiSSVLOlQvqg/ARzoRqqTReEn55briTzSBnKjStAoAzNBNHXmqoOqhFXRRdGVpTf6sOicco9bcOCPX9u7hG41LrorPlwl7zTX7bgFi/vnvDhjegH9vdsGA9e+cL3jsJEbuSvSaAmPK0HcWncGBkw5xr26RYM8zNPHJGw5W89C3BLJW8vAOeMc9YN4Ir/mtx2Yav+kwf/HbBV/rn5/KMggpjYBtERda0GKq+acTJPkpKUSVEk49ZTHvsBzlQ5Yh9ENlVx3BfDSRy1KK1NB6oJ1JWumiAsSgmz37gwsiHnG27egXd1zlrvtuBGJfJ3JETmbrI8zWNyyYZzxR9ZP7AB79Wjz9mwa7xVfiUAIi050FiMG7EH5OmLFpBwGYJOXrVJ9u8eB0uiU4KXwU2ltH2HPundx1ZN94eIfczU/p2H1TT3+/9/Q/7/sd38+vR37D/ogR38uu+hHQa3ceD+gwZ/uhEVSQkJ8EUeKGjdTAcW8nnzrjwsdD5g/tbnQQ/ebX7UBt1PIsyrxavWEJgzdXfOhzXvNXo+XKn+qPjt+yBX0JoTm4QTuweUVJsSiA5eQr1IoHwgooiffu4QVJ8eXZIFNzVcfRJPu88+SK+vaglXMYmRK6CrCJQedyddoK5FM0VYjPKNO4swb733r+5fBl0u+UddWLDnJcAl3nIjF+a8eeYd2PJ+bvnANfnKlb/8AmQ6QscDLNUWAOGMPW/BCbPQ+MQqHHM/9NAngYEMndCCU/VT8pgNI3MkAVbsK+4lCZH96pM/eBSIdqN1H5QpahkbhK6RASiqftwE+spSOlCgQgeI6KpG+h4C9s+/Jm9o/z29Hey4L7BopO83T+ImSfY2LlGnIRqApaAHysjUZuqwnL+9da8Jd5YeeOozEtaLyR+76l7jmgO3tPLmSQeWvJwF8Df6n973Zy6ExTcrfQOynWwll0SC3UkRFOP6eACqpgx6QJ0aPRBFwqk6XRpBeKoFqoOLTVI77AO6sFURRBlLFWCmtdg32nCke5f364/De4xPPvYHFmj+ggQYOgn4bd3bSL66b7rnHHiz8gP/qTWgGfVDmSwM0QO6eDSBthqkBCPT88h9OkABSQeElc43UhEdPRH9Ub2Us76jFbMtoLfcP+PAUutet/wQnKnf+/j7HdCcjA1w3bhhTSRc8i7KFQmrzl8+6EnYdvq15x+GbEdE6jmYVJP3oxpxI66C6OHjgfCpUALlMaAHylft9HP6e+Mfkqj8SVBdVVcFEEaa8UqiWJRDOS6D6Ki8qIDWIaAFNPXGERPmi3d6H3kETPODny8CF8Or1roDl73LdiThjHubqdvwWvny2isWrErZeek8zJpZIxdAbMfV2Aalz8mjdcjzYbf8CMxX3vfAx2y44g3khoQ7i3e5Sz4su4Y86sObld6Df2bClv0Kzz8NoqNqCXMfvlYHrak1Ml1QgYriJLIuxTqIgvKVA6rHQCTjGKkBB493DdKMT7L/mZgiz76q33SfLGFRAWUrVAAZN9vIAXOD4/k7LJjrvfuJT6zC8dbtzlEbNszz/oYNa/U1K3bgOMd8TUIkL37tZRs2+z8L/upJ0JwsuUdhUh9J0QaKQmouUBJBbANdVVKJQxIlIlTCwAciNUjFVfbkU5WEQ3v6YYtxOFP3dnvwdotyuP9Xomm/hP/n2w354dTH26/uJ4v2I/Vo7/eSAd9v+xv6AQ9OFBJRCdWirmogXK2WzcMx3md8YhXm7Xc/8Qlgzl5w5x3QisIB2HK22fZhwZ13Z32IvDX/hg3ompH1QJSEq1mgdEIhAV2rah2gISqZIqg+lnABIxW72NdrTlSzDJLIIaSfyizuyX7SByWTCAk9QdujE+CCqiTc2lpXK2odOFq4u/7Rz4PmHeOsC8vhsm04MLaGAGy66+6GDcdsw5mzYWKOnh5JUN4knFRAlCnRgjgf27EB2c5i54QDeLE44AAAIABJREFUp3offeH3LNgMx6awIetlZMaGI8GyD3DNuWaPXMh5OZmTkOvOFudaMOnEFQygL+oZE0QlU8vVgbaWiMrkBVofREm0RfI+DErsp9iNvdLI/ow46MDtq3wl/6b3Txf0VFZyX+4VgNiN85M2ZIp6fcmAU96vLX/qHOxWZlh24Epx4F+z4FSQ9086cNw57gBcLl62VizY0nfq0YuQc2Ybcw5ketnyjATliaZWB4XwMzUQlihpJog6fVEkyQhZoHqqqzxQPdWhDURKKh9ECRMDRIeWqAOmKiobZszl4BYLFpvve+RBF940rvgrFpwrnnOv23ClctVaBTa9TX/HgUk4cWIXNCfrzwQgdM3N1kG4Wj7TBRpaPWcDpuZmDEAKV1RA9QALVFf1VGIwPeWBCvCTDRbQQTRFRZiQ7c725h1YLrzXvH8VhHVq9YMSXucNc8WC0A19HMjbeZkx4bbKrc4xE+L+rr/lwm40kpM6xMWEGlZrZBvZBoi+Vsg0QNUoCYAAUzggiqIiauyX1IKUSz4i2fjNNKMTJqBWFdBJVf8SUFheSTxQJSVVE2jSU0XQO+/q3hHARD/2+N0SxomZ4XRwiiMOrMt1d8OHdW/dAVgsLLmGA6pLpDkwacdtAsh42UGuAllO2ndLWHTufuBjFtzSutU94sLIH9lDCaGReE0ng5NSs4ECzwpgEiiEAZl61piRoPrC1epApOlZHYSvFTJtoE9bVAFd1EQXMEmOHYapmtlUbS5PXhSTd5XyLOyrOprspeCFRVmUgZYqK0B4WWOmCEbxPebHHwJaxzAtGBrJPrIcLsslF9b9dX/dB+FrPsB8sMCiCbFHqFkg+lolC9AXnWwL6ItBtg+ipQUZgFA0hQmAJZz086UOyZ7hTfbxm48Zv3Ogd7PG339g7R8W7JaADPbBB0lLQEybTPMDU1DTeO/n5M7FFNCQZRFYRE9Bc4vij9K7soAuTmCSgKDywJgT3APi2+K6+AbwGVEUXwGanBAl2PzKpc/8/E9grf/mF/qPwqmvfsAqBZCzl1qLRVi1V+tbEm7Rb7HnTRg3dCsfwvgrmc/NGZBdHJ7Y+B0YFXe/sT2G+Is7/U0HxN3al8T9gE5HfRrEPfiqDCrCQgcuEuAD+fQpBqkHTQriMtIrEslF4ESSIhNfEV/nfuAzoi9sEnnI12DtS+e/9dPbYIsL/93LH4fTH/lA9eMe7NQy9pIBo/xIKhPyrVuCmTqsl1TzpA053fiXeQsyevTZtd+B0Y+Hhd0qxM9v3H9VQnji1f/xr1+EjROrz60GcNb89fZvBpCpZiyAK8YVJ6zDrb3bjFtdOBLdWftwHsLw6p+/9TnIfV0LlAHqxO5424UJu4Wdr4NmaPdkzgAvqYLKAvcT0gZOEPJpIFIXuUgSUV8kAfMk4z+dRVN/3OAEoIuvYqTzaAwYnOEewKQkXgJK4kuUQQy0r2e6wGvjrw/HsOK89sOffAdWr19++MIfw+32ffnf6MKJ/OnKrAEXS296kQU7cpddF94tPyofLEHmx9l/NDuAteevfObiF0AZ488OXWBx9JGdMYhntEg7Azh8VZ0B9W2eVxcB+CwFEAXOYID4hjDTZOgJ0QG+Lb4qXgP1jCYzn4FdfeOzN56B8LOvfvOv/yXo7Zk/zZXgvfZv9P4jB05EJ/w5wBgYRs6CI62jxWN1OGa/d3C/CTvR6v90xYfJxdHzu38MSh9aW78NfGPy28OPAJviolYE4dBXL4Fo8G0GIL6Ezf3AF2nwReC3RYOPACZf1xxQz8T9sQfD3rVvvJ6DrLn78XUHjt//buvXJKw7u62xhNVmaO9WYLGVYFZv/fT7iiUX4pr4YM6Gzf/6auvNj4NqjJ8ZfQnEl8a9nQ7wkqjzJVBfVS3VBr7K11URyFPjHmDq+F7kNRWQAGgb7IOlBlzks8l8EV8CcQ8WPwY+TUFkQVWEJyKY3LPRuDaGnfaFO/72KOxE449nO3DG/WD4fgtiI2a2CNfNazKswG3BPb2PeZD7o6X2yQDWXrr8uXNfgKyRXcz6sFu64rzagOvjnz/34x/CcvcW+e4azDXyRdOAsB56ay6c8I5VdBt4aY5TPkyKi8VbTJjpxC9Hz8H4nt1v7TRg8kfRVza6IKqqFm8C93A/ZeCLyfMKU/yh+hbwh1RSR38P/LsH/pyuh7sBPQUBh0AexDNiU3wL+LZY1GoQjyeFsQ5RdlB49UXYLl95+I07YO4PTw/uGcDxxhnLMOFG9YaxFcBCd96aN2Gxna+9pw7b18V3FiRove3ejRdBGSpUVRgXtr8UPgOiJD6SOhaBMoBIfVE1AIOX0lp+hS6QZZPr6Ur/Yrorhun6n+4A1w/sA1kOU7aO0/0im4LjDgaQU7DbtP0KgN5+GY9wOH5OPf39+Hqvf19n1jhw39tTKNGhrwZTrz1MDWJEBCpUSS2pTV8BwhBVTFA2kSqB6m81VkOYNXMy+xRs1jcdbJixZ+wZB3LFrI8Pa951c+DCGefjZ3/fgmP+791bteFn4f+989yzoPHWHT95L4Stl8zv1WA3XC2+laS2Eh1iSaha7HuW0+eZqhgZGGlKabCnLx2mzyFBBaqtGsCAhNstr/yJC8jYnBigiuu1Sz6sdF4qPwdsozvvkqA7uqlbMGiF9pILKyV53xsmHOPY4ydtyFi/+cB/5sOl4G+/9rwPqnS59OKDEFU3i2smZOsbXH0ajrhHJMBV56ocOTBrzTqzDsxXksd5K1xjDThb/E8+31Bwi3fU0Z+CV+xu0AF2Cq+3fvgw7ASv138QQdyKi+hAnlKiE56ogNG/aZynb2tfHGJKQTmt4U5jjHz695IIvU8v4aZW3aSGiqU8UDUqqgsTa8SuAQvByFi3YXEw97juwkX7TX8I7NR3iCTcxhn7hAm7xooMfcB87xOflHDWfu8jv/0CzLXW7PM2XAn+Zu3/smAlfKnzzBqoyk4xNEEUMWiRcF0DRKpHEpknqnAhBeUAJr4agHCpKyAjs0Z2AKItotiEkb9av/w4rBnrFjbsyC25LWFUn9gTB4b+ursKDOvrdmjBYvFBu2aD7mybWxI2Sy8b31+GqPKG8cMODAcX5F/3QbToplSulYMZEVFMubANGmmqfaDqoJwkNTpiaA57sK3fCC4HsGQu3Du/DKeMW61FF664VxibcN4+57zlwKINIxveW/9d558Ap/ufePafAG8Meo3vPAVbvb753Isw7p13f1SBsbVVvGEAngrTEplMwV363nyQJKnk6MC4TyN3mdSQ1QBPOCDyBMoBVYutSQC04/KkAJo19Dc82Oxesc4/DlerVyXAydYJsias19etjA2X/dfkSxJuqb/fLQGqfvtTHzsHE/eq+9oLkDVWzNfuBVnpWf/nk7BqXn7hAvDu+r32B30IW6GcSFgrrpsAC62cA5CpHHVuBe7q2eb/8BQMrRtq1Yef639u/us/gEnpvPzhixAFb9kvS1DhxI7rgEFJVAGTorJIMn09EGYSee8pi6WaEyJPgSRTmIymxFcuCDvB7ihb2amYTk+5oMIta8WFNa49NHgMzlgfdM4CuqG7OrBubFhjG+ZdZY5cmPfuPPthE85UPnn2YQmRcfncBeC11p8Xv3kvjF0pe0/DsH6jc94G+qKQYERUDS9Z16rMO7ebY+3kuaY18cOR+80E32//K79CifVfti8yTYsmBvhg5Wb/3ODBFPvhO6Y/G3s/Hby+l3JlinLsp9rSPXogKqqnyqDMuBG7oNU1Q5OQ6ecez70A6+aWtWPDfGXemrdhEkx8gLGB1BxYlIvWvA0blRVz2wdVzjg5CSoaV3YdmHjDfOQDeWwB0KOrAAbIlKpwSlwT7aGXQw4+3ZTgIUqZzUJhASFdWoBJSwHUYnviAZYqDjsk1Jx9uNB4ZvAnJkx0jKwJM9XZr80GcGkQvxhXYFyO7C1gs5P9WubLMDHGT499oCR6woJcda646EJcHxujEGaZIfcYxFbCvb1ur5vrDpxqnXaPA7vhrgswNHGyPpxyjqD7sOmEbLowLmpy1gbViOprFVCeqilJYmiTtK5FEZCEhzzrg7Xw8MD4HlR5iiCl+0lqhMaB+8NUN7qcqkS1VU0ByokbE0CrZyMRQsbTeloLBvXLXH4EYm/BNXw4WzEdQ8LE2HUA3ixeNq+6sOAsc9KHW9xj1lFgvRX51yzYzW89uP4i0JrkR1UQhohEASioAnlQfupQDtKMTArKFKX0NEWJPH2gouoqD3F+wqQMsYc/7MBWZ7O1/iRslNef2nFhrqiTs2HJO2LPu5AJlt0lCRRH1mkfMDNW1oRRuC3nXLjWv3b2VgcuBz8LN0IQfSoiKT10KIDqEyQlHuVPGfNUh0SfugmiRgkXtK5WEhFozUxN02FkjEqjAM4XL/gXnoUzlQXz/cBp/7TMSlioz7qngQveq7xqwdg9b69KyFeOu0clnAzz6lYXNr2fyuhpiFuj6m6SuXBogmrRoQv0CGgDJgMVkKzvAQdrwoO9jJa5t5IgoJOQGuMJE6irUAGxOSkNe6BVtWKmDTPOpBatwsD8uwd+KiHn7di3urBoxvbQhvOdN772ig8L+aSUNG/OmkdcuNrbkTsWzHa2v7YOZLpUJhasG+syVCCkMJPBNkxDwoq74mwAp1qGteTDEXnMOm7Ddfst97oNJ+0jcgHIdWcrcxJ2g53ixoMgqiR66h4lOkCYnH4QhSTFrhLkzX4KPY+RgmnD1NEpYKX9ADLFRlQppliemmqA6sX12IZMWbM1CbuN6KnoLAzzQ4kNR+wj9oIFK8ENQgcM/4Q0gIVgiZGEsHLVui5h2Z8zFyWIunhYODCJdlvbayCqwhc1UNU4VMleXU/2OWFQBcI9cePpej8MakuuJdffyTTvl2QNDrfwHe7+9779csFuBw31wSvwdlDDzZj0t6PaD8Pi9L3+lLIwrT2bkBrSAX2I23EwKcLS4BbLLILGrLUA7Lqr1gZwvH6cORt2wh0bYCK33Q0XLrvPW//OhMv+Dx/9P74AQ2PFu/gcaOWxuV2BuDouDXUQHSET0QM1UNOtupd+3iQFONg7SsGBrwNClRjyfBqhh2ltK0G7F1RXtQCPWhwAddVSdVCtSYEaxPkdc5gHIhFpPRjXh062BHEUN2MDxEB41GBijn01gLgwGUwGIOrCFU0Y6uMgCoBurryYh6Ptsy+8Dwhl6ABohoYGLNlLJsAl57y56cCkfkO+CZznlfPfdWDQ/MmT3/kaqErUW98FwdjbcUH1VDMuAxalFHU7oJG+jzz7Efeeod6L0I1DIx+mDpCBntYA995fOs4FdEhZ5VAdZSlJcgzRh2wh28jUYezNtY4+Czv10bOxD3f5Z1iWoHnCBZDhRfu6CbDjrlswDC48/WMb/ib/k4e7z8FOcN1+0wLRH4ltQPTJxz5g06MPyqWlisCADj2gkGylYl9+Vab3NZQNDJSlmiAcVYr7kDEyhWwXzujv/9mvvwB3uKY/58IknLgAI3NsAkTmujORsNE6b7/iwzX5kzu+C4TV/n0/WANl7RxdOw9xa9jZigCLbpw4uCYVEBYGFjBIQFNqkBrCAQFdUFVVUDpQjWtxAUQLR9ThZHhn7QNn4WTl9OptDlzlqlyRsC7X/VkXTtVvcReAk/aiP+PCa9XnvvBNF16v/p3zvIBMM3pwFYiDKFpvQGxNysM6UFO+MkDkaVIl0YlPDHefqSEP2cOa7DGcTQ24keK4B4kjr3zVUCaIkqjFDVDNuDCxQFljfbcFm51X5DM9WDN+5voPw9Uwc1/uPOTsnJh5GkbOuDWpw8u9v/L/VQCZrvjvqcDIH/7d7qNAj4YC5rsnarffAdpg8YUTPqxWQwcLjnHM0SwIzdAcm7DpbrqbgAouO30LZPG5O751B5z3Vq68YcFE32mGAcTtobHTBBFQUUGCzRF1UANVUk0QFdESyfMmoiSQR4IoJRgR1U21FdKMiyglDqQaUMIB0cUWVRA1yjQh7sdhXIHlwsnwTB1mykv2cR82jHUfG45UjlgA14xrbuzAhnFDXjchMn/u93y4VHn+6J8+DJnB9sNXgZG/Za4OAH8SDDvJqQ1RAgz6KslITbFBNx8bm7bDvQeonN/h6r59eLu5/pUy4NP2Dwl2e7vfpN/UfzjiPmzcogO/NfXEDntg+qH7buZknzKETcFPMp04VZVXIcy4863FxyA2s37WBIVyYhPmzDkTYFtu+xMfNpxX7ntewsXm99f+1ZdhGISFASBMVR63gZJyYo/kHHYN0FVFdUBJ1VZVEk9xwMGJF6mDkebNE3R/o5+miiIiEHqSQlNSOcoECpRVDWhOwnEFCOPB2APRiAcjA5Qx1qMeUJpYQx0oTCpDC1R5Uhj5QEuVJx6IKl3lA5ZCOaCVM07GhlywyDEL1uQa68Cyt+wu+wnTHcBaeN2+asH11veffuJpuBq9YHzvaVDNYXcnBM2hOikAXWpqAPRjL24BRbw0EvdoHRgnXRxmbrt53H9R/5Sqdfp+80lqWAVpBJxmOrSKsEQBYiPuxS2glqvPA6frpn2HhNnWDAAXuMCGBblK1swCqigf/JEJF6rPOv/bedjprvQGErQGxE3QbK0nACrKnpRBNVQQF4C8ksoFUcTcm/fhfgS8FwmnborwhYcLoq01tApotlbX6rATDO+b+PCG/Ya5ZcHr5uvc8OFN46K/5sAl5w1+LuFl2Tn/zx+Gq/qL3T9/GMZE/c0AJs1xY7cGKlROHIHS43AiQTWUHjcTVLiqgxokIDKRTxwqUaZMGURLNHFApajySW1SGIUwkZo7I+G4dYuz5MAddVMecwE7iRjfqLzOFRve5C++9pSE3d7L3WfOg4p25KoP4/zQ2Y6AvrJiB0QEKgL6FBN0tnKUBRgpOnvKtT1IQaNT0YxkDuyDSaMENLrXP8BTTVCBqqg+YKtiHIGqTcJRC2J92N2qgWaNwq0+qOaOtWbB2Nrqr3RAtHedMIK4u2OHDkysyF0vg9aJO0MPVDOuTAIQeVEUEo7UjvunHAjD0N20IVvP2gCLrSXrCHDJ67svmnCh9d0v/MnDMKpcrb7mwCQaVaMAhEEouoAvyqJLAv6rAi1R10pAKIxMAahq7YwPoiraGR9UKEqaDTQ1PxOCKIq65gKGKGcaaX9SiipmbMDUKloNGGhkdFBtLNWHXGkhWD4HS8FxbjFhM9xwty3ImckpjhlrVs5ZIPu9p7smXPK++7n/9UWYVNYbl1sQM9IjE0REUZUAXRWUBXhqECclGx+HfZDvvuN+8354eH/ftxaHDfvNtuPmdPyvaPvlGvKk951fdXTTdxG/GJc4TaHoB67vR+X6nrdugCiJCjaoLgEh0BKWFsCOfsU4dx+se9fN60DOyjkzQMZMUJnbxra5Y8OJVuHej/pwPPqAf/+zIEo5b7YOwpo0R4Cy4sa4B+QVcWKgHQUg6SZEKHupnukxqSnatJCiTKcnQQ1hkqA5i8l9KbeySRFUtPdcA/og8qqvHMCnqJqAofQ4BMK4HReBWhxOLKCg3MkA8OPqpAe0Y3uig6hQV1VQviqqGigXV9VAGHF77MA1Xn3xJy6MjJE/csGQhtQsCFuhCZAJZ+w5H24LPu5+ehVmjVPyPS5QVeWxBRhxMPZAFSbtcQEoUokdIFRtZQEDAtU5MIoH3byDKfb9MX/n4ybTEoWRcktP50paQxVN4YokAihQgXFjHI3akNG3uHoUFvzEgF9sXTIjE/CxlQm3e2ctQ8K8dfuzH3Ih17nV+YAJubbuzVVARHF13AfVnRgjOz1G1QAselRAmESJ45WCtPoE6cYFgChSopSgiCkDvgrog8rHVmzDyNqVUQhrhmz97R1wxFt2Fny4Td4mj1twl3OHv+zAXRT899lwh/kb5sOrcFze1byvBdmiyCsTtK5yYhvEQNmxBFFXbdUDUSTAIcmM9EgcXQmqlzoaPj49gERlTnNFoEWQqWb0TACr5vnwZ/fBq+7P5AULhsHIBjDrplwwYdlP1PzG/WPmHRJ0eXv/Qw7M6nPFBQlUJ964BHFrIsdFIIj9uAtYKlAVIKSrmiSRtc9+JD7lY5ga9L2Uqnq7oU8cgMSwB7RVGYiUFTeBkvInJVDRuDEEVGus77aB1qQaWaAqw/5WE2iMCjsh0By3d31QjZEedYFa3BnlQfToKge2WyuFyxXI1YdmCEz8iT8xYTPYkABHOWplJGjWIsdcOO5+qPjJh+BIeGvzPUBcURVsEE1tkCmAkBk9lwd6mXauDJqdc3UPRDHrzkgQ9exgtgTCzkm9BMhMbdYHIbM13QcR5Ry9D/Sz9owHwsoFeh6Ek9VnK0CYsWdboHVzkT4Aoowx04ct73rl0qOQbU38HQlDRnLkQGxNTIB5Z86fcyDXP/n4WQfy5ocHn3ocZvzF/NEQ4sKoEFUAPS6Nk8AmmLigeqoUdwCdfnqOPEzBvknbN9qHI+u/L8L+D9SQ/0Om1m824NPewxH625l89s+LH/TUDg7zwX9Rqm9tiCmHW14USDbuLlAiOe7kUSAAMRBFrQEqJW7ZNMMXbriwbJ/x7wImXuwDDIOhv2vCrcVfsz9hQlS//aH3u7ASXHD7z8Ek2PAHOlCI/TgEbBxVAqKEsY2IBFWbJ+EaTp4s+a8kOUZSIRF1kex5msIQlrBA+cpXAVAQJVECoWMyANVLNnzywiYCJdNzvge4iVViQBKwl5kauBIuFqgQnyKIBiXhAJ20xljDF0UQ5YyVkbDT2bTWH4UThn6v/gjkwsQjX2uFcl3CsjzunvThWPA79/6BhO3GzOoJYKd8rvvXNigrrkw8oKuMuApUVCKeInH2MiYF9ksh05redFz3+6cZjSmD37R/avDzaWo+cYgkiVqUKSqiCdSEIaoQW8pBguhnBpkyaB2KcQEG+sWH3rJh18r584DpmKbhwq5MRGmG3klZAG7zf2v5xLNwo/adfOs8rA3C6iUbcBSxBGFjqQZAItqi+un57UEK1jIpYB4AH6VgpDRhnBgcGzRPtLU+ZPs5d8aCRWepfuQhMOzlZYAtMxHtWbPXnJGE3coOuxZkvfc/8SkXsjXNXnJh4v38h3/5NVC1uD3ugDAVcbKC/FQnra88EPl0Q9Wn6lrJfFIDSik4tIcJVHGUC6InnEwZ5otz9iwwX545pz0OF4sXnRUTTrjHzaMunDJPmTMWaP1P+L/vwFuW8cBpG8aD1S9crIPQV0oXTVAlanEbVEF1VR1Ia/cYgMO+Yd53zpNZPlBTcOhN4EiVcvWnGIrpvEhLBfRpKhvIq2b6c18FQDUeqBqIfKIWp3qp49/AER6IsigLQLVVWYQgmpqrFUA0RYQHsa1KKoBMJ1ZjCTlz3p4zYbUYmjsu3Gbc5s/ZMN866Z4GFutnHrvThXlvyTxqwXr/UvvnAag6QaYFwheDjA8TZxKNAa2WaWbqoPTJYNIGla6BjMz0MxEocyzHEnC1ulYDEQlLdGDiTfxJANla1sv4oGqxofqgWsokD6IyU9R9oBibog6jxqg1tiFX0z6vHgFhaWg+7BA5WDBX1E0cmAvOWO934UzlPvc3fIhK68/dkHDDuWK9+m9Ak2KgCkCelgpJsDC1dJ43gDRDlX53MMPGoX1g+vPNBn76u/pNpvvthv9Xsv3ywG7T1238wjtuHoL9FOrhq/vfRUAkpucPU3kKismEEY4wgLo2yLSAmqZnmiDyGTfnAWEmyDkQGxl71oG5+rydlTBsJecncZDChxX3Rfk8IL0/e/qP74NxbTV/8T7QasITNsQ+LaWTGGYTCDGpAQNREwMQVTqiB6pLQh47rU2WRVv0QNmqQROELWo0gCKtBKwjLOogmvREHlREV3WBnqjSA6qiK3ygryqqCqJMhQJQoSSKgFR1ZQCWqKRqSY0EHaoS5W5buFoIlEWolUHUM+S6IEqamS2D8nNy7hwsG8bygp2oWQEMGTkjE07Ko07Wh5/inv8XJtwIX/nnf/EwZBzCSRNiQ/VjgCZdVQF0inSAQbpx5tHTiC9poZpG1m9nbkrmzZT0NNob94h9laepYYwoUANhEyXUtkRaD/C1fCaCbD7n6zqMK6Kba8FGZ+eRIXC7dZt/WkLGyjgAkovWioTtwctHn3HgRicIv/0o7BZX629VgAhfAMLFJsksBEQcFrkYAAWK6bzUMVL0sA4EoiRsEDVR0+og8hk/WwHRzoYzdVC+sDN1WO9uBJv3wuveG2fXXMigSeWCXtTRfcgayhpJuFz+zsP/M7DZf03+8Msg+nFn0gDqqqBsUJHqqgAIk1o8IT6tdBUlKeo8RRAFURF1EA1R0ABszcq2gYJwsxaMvUmoDFB+Jphx4HTx7LkzFuy2lI2ES/It/4YFu+yaiy6MZN953oZVo/vc//IcjAprrUEHtBY6XRCDBN2vaviqCUj8hDAEqB9Y7VNsicH+xh+xjyG5GWOxp9stzD3H0AAkQUowo6tmOg/NJGKkBcLCokNCi2OC6ogCLogGUUpk1BQDUE2KWhM0MlGuA5Mubc0FUZk151w4xjF3xoKL5kW5YsHEiuWcDUst3c/acL72w0f/zIGjpdlzGeDY4COl//hZoBd743OwVF6sL7qw0l9xb9iw0JiXCxZkg2yQkRC21lprNhzlKEfPwq4V2dEjsFvcjXYtMMKj3lEFoR4SPgIztVw1twxz3blg7hFYcVf98Akw6kc5asLYmrjqMdhtCGYegCPtU5z1YdfbJJKwZWwxAY67x60MsG1I+0UXflz+5pPfeBAmtbD+1pdBFDOFTB7oTsJRG6ilmahBQuCDQbQX2EwzKckKlzel0ve/vlO0/XaDffNv/n39/163X54hf6dBgn2QwjulWJMF+Ivumw6ynt5XEGUgoiJMwBBtrQzC1ZysDXFZ9LJV0MxcadYE9Gx+tg4Tc2TtPgG61G2AHW/bB8gWs+R8WDTfZd3mgCJ+MX4QYNIbBYCvotgGBqpyQNGAAAAgAElEQVSjKiAqDIQNKiSPDfSELXSgIYxMA/CRNEA0RV7rAl2to3lAI7YVQF8rajbg0FIuEKqKaoKItKoWgOrFjqqAqIkWdRAIXRRB6fEgjoCe6AsJBKqagIOUHUcgPOETgcrHTlwAURSu8kEYWj7bh7gpwowDWpAJcxGocsaeNUGztGLGgSVj6TGA0A5NzORYXs6GOXPRxQGtvvxi3gLksLRVB2RciW1QfpyP20ABOzkOtkeAk4D43h6JH1Y1OnjsjAPjfLBSbqRf88AAXRSAgmgJG6hq3UwVVKj1Mg6IrhbkAtCsmcYcEPWG4bgFp+2Fs3risABwoXXe3nEhS1bmTLjVvPvz90jo139037ckTHqjauSDhpA0gVD1VJuEWCX5pD2aJNSaJvslgT5T+cYKDRAOCbrd06qZPChfc7MBTDpxTzUAN5ef6cC8c6R89PNgBnc8tAzM2jkTG1Qr0Rsf2rtSB9YL+SfvMGGz/bOi/yBgqXDSASp0lUfC3OYDUiSMX6HqKXf/86mQPGVQ/h5RR01IELoWZOug+bnOrAeanIkWgZ3Bbn3cgje7589degHu5APurQ6clWf94z5ccM6z4sOuN7IzLmRb2nPiRZjU1WASgSooJw5A+KqhKkCbRGfbZ6CSCHzKKZ6s+EHKSDd1+KYb/D5RkHHomOJ0/kRphG6I/B72JGQfbGWkGIYBfeWDkgSiChiUsIE+yTE4E0+UQDhaPyMBT5QzVRDdTCMXgOZn3UUDNlrrz64Dt/nzLkDWz9oZFzZaGxbAUStvLfiwVrnXfNCGs5HpLks44W6aANf9649tunB362570YE3/QvuUELGy7pZB07ZeVsDXq28ptYtOG2eMo/YoIWaBLjoX1xdc+Hu4t2PLNtwtXLVwoShOZS7Em63zlqzwOv2a+6mC8etE08smjDvzj8OIJ3z7roJ2foRGwlz5sTVTdiqb/mbPmgt4SxaSWbhdhtWic9TBBWmKfWCqikPcKmoAtBQofIBSbLPkZScuBkjdBCtPrUTByPzg6XW6dXoUP/N5v5X0oBP2y+D2e3/vR026u/crx+4Oh3c/eGaigUkCy9MImFKopZxQVVoJBvp7GCpBrc3f6vx6CPwvqL9RPMhmJHL5nEHZpwcADutSA6BrKG5woar9k/WvmvCKNiMVoogysIWZVAdVVXJZzBFESgJX5QBL2HCokFeREBXa2XaoPKaOWMDYdaZtYFmJtCroPpZT++CaM94831QUdaYKwPNnDcfAvVccyEA1cp25yKgkqsvdEH52f48oHoZf24AojfjLfSAaq4yVweCbEkPgGY2P9sHVc94M4CQ2WjWAMxML2eDaqNrASw1znTf14Jbqr/7Qv0hOF3/1Lk/NCFrZU2Azfqm3LDhiH1EHnEgclflyIUbzb8tfl9Ahqyea4GqKC9ODKtLFUSRAgb7zGv7VKz7oL6I5ByzDiAOL/Dkzv15sJ/ZMQ5iIYgwKYOwRSjqQEv0tBBUM+5Th7noeP/WFhyT98vPPgCnWr937r95As44d8k8sOqvALAtt50d4IS9LBcsuFp/4Wvf82HX2GqteaAVtLzmAza6ckE1VS1VpQLS5y1y0ID3U1EXkwKIqmiKHoDwEvUp8loTJv7YnQBLzTP593Xgo6XP3dJ6Fj7Y+U+f+m+BneKWC3DRuOjsuPC6+Ya17sLPecF62Ye3wr+pfOdhiGVcjA2IG3EY10EV1UB1SFD0Dqie8lODJRmkALM8iKKwRRNEW+S1Dghba2a6MJETY+JCbOi+YYEZ/e6//i9XodT6rx76F8+C8HUWbDjHG/YakGPGBzhtn+SYC6H18qP+k7A72DRDQOtpXdEA0aSoAlBtGikoNGlmeoxsGmnfzKW9T3E8Tc0e7p9mGKazLDzQHx34/+yL9NyUsk9KXSKfYlUirKREInpaB3BEOWNBrItSpgnLjbvbH5PwQeufnWu9AFr9dqvoQmzHEmCJJWtJwkZlw98xYbY1KwFylZyfkbDurkl8WGTBApgEE2vXgSjYsQCW3CU5Y8K2u5WoATjJR54LdTvnwrpct4YW6JbuAxBgTRzYthIZ5sVw0UZC5EXmlg2xnNgAc86cnwM2W5tEFuT8ZP/TQkFsQVSPfIAFZ0EiYegM5UjCRCbHUceVN58LbBgV1vQrJtAWkQCw8JUFBKqjHBB53m5KD0fZ+k3Xbu75+1v0C77/FW6//HPk8It9pMMb9eH+/UrJPppxGsElkVlCSdiljwtiIGqaB0ecu52P1yFb++ATv/8YnDEe+NSDPuz4uz5Alh1rB9DMJKU6dIZy6IDuzTozLqy1du0dH+KKqsUmZPuarhVABWlq2xJ1YQEGFm0QVb29XIUFTlffG4Bm5Wzdgx0rqkQWHKufce7+GUS1caTuTWq36g9gyTlSOeJD6IUylDAv5/rzL0DGzgQZBevVjd76U2DUjNJRB3acHXP7AZgUJsZEwmJ3zpx9BFaal72LAmbcDKIFmi9s5cFG7bJ8IwRRi/xVH1SY8WZCONa7t/s7Z6HQ/92n/tkyXPN2HeXAopy3ZoBxmNAiDd2RHPmwaCxJgA0uW5s2xPXh+Z2HIetptUwLYp+GcICSSDmXVUcMgAG9NMWeOD4gVZeDqfN9MZSkZ3Ao4xIeMO3TSDxxEFJ3KqWuhLYoQNynpVXgeHhv7x8X4Xb+8UP/xb2wUmF1ATgenDSP+iBsYWLBtdY1Z9WC494Jjvkwa2clwFp/xbv+KGiOQLNBQwsyNYhrOMIi4TLvgqgJR3igouS4014Enk8Z+gopZWuIC0BVRQrQ8rn+bAtM+7es//wcnHQ//sg/PQu7YY554Fzxgnsd0Iysm7Fg0Vt0FoFbfMOc82FUz/h5B1ZL2oOJAcp1cg7EhUmQAdRAuVoLqMcyNgGfKg6ovnKVTYLRGIDy0pqwmVChZvKZXq4GJ+SHKv8ImB3c+0hlGcatk4/dASiyFoDpmL5hwpvGJX/LgfMt6a9bcEoes464sNDQ6zMStjuTRK63oSqEQFkrZfKAH7uTFhBgqCqJOIhFEiE3SCJneXB+HIjkphH44WBg3/An8yTauz/ZM4xD82n//vyhDBEiqa0XcUUNVF75Soe59lHvFDBvfbjxT2fhpP7hz5eX4V2Vu5yjPmy4b1grFmz7ifjSUuuI1CxY8y6akYRJMGEOWDQWnUUHNutb/pYFJ5wT7gIw05oxZ2zYCrYsgCPuERPgin3VVSYMGblIWDAWzTkfVuWqXAM0qdkzJI7CrAXb3jaxBcfc41LzARMHCUNjaALMVxacWRNueDdYcxJsjg7MOrP2jAvb/rYTu3DCPI5mg6pjKwuG/tAFyAbiSeWAasTuRAKucIQPoiRCAaiBqIoOiAJG4riqfHpKJVId9tfvQRBr0m4+pXI4Aj8cwh3EWBnpb4d715N20JL8yrR/SEP+drOt/4L+v+8vHBzog+CGgymV/QWZeNI9yrELO/5190IH5sJw7S0JkTOwrviw7Wb8eRtmLV3O+aCC2P1/yHvXIEmu687vdzOru7O755GNGQwKr5k7AEjW8oUEZUqlB4WEdlcqrbWLHK13VbFhBxN22KoNOwIFryNc+rJIhMPe9gcHC17FqmR7lwlHyFG2FYvEihRLlCkkRFks8AEmSBAsvDg5w8GgZjAznf3OrqrM6w9ZNd09AGxp5aBEbUZMV1dmVk123pv3nPM/5/z/SBjHE3sSghkdtY94kLvZ2UwChqqIJ0AEejAfg4omnXEVaGqm6gGGquctUPWJPerBbc2PRD/9IMxx1/GPPwppuPDsSgwfsj9m32fDD+233TUPjN7i44sxnEhOeAZw3jvvXgnhdHL6s3e4sGvvunkIi/U1tebCfd7ZB0+EcDG++PnEh0W7aJhbiUy5APzAf/PMJQX3cg/3ALtx6o1seK3/7NPtJ2HEIH4+gHxVSWFCVk3kO0/Adnz18Qs+bIU78VjCnfZD7sclbIc7AOiOHmseGNLwAN4Jtv1tF5SlnuYckGgVPQDlaEZJguhpfqkKWFhqCCR5qkKgWvS/M8CfLrT7nOmzn0P2F9x9Qz4luLgJkZZvzoIUqBTFZKqnBmoIoqwaWQhj40bjhxKuBefjV87ApH3ULgMm98crLrzbvu5lHui2Hmo+nExOugBvh2/JdRdG0eiZ0UOgW6VKKQI1GDu6BNUQA70Poq8luQkYuZ9VgD4DVQHkFKIuF5CxGkzL2vqEJCCGwhN1YJi1J024kfzAfjmA7eioe1bBnHncPxHCafcT/sdtOBocLaDxsNAESJ29GGDd3Yl3Q9iTe4/tPQOqmnWwQKyKqGQCkahOykBCP48ASZSnIKqiXhRlqoHqgxoiGQCB6pJCtppVxsBucLUTB3Cbmz+8dRzSeMO97MMF67zcBe6xpH0ncNo+Ey97cDG4EO/4cMm5FF72gZCnALSW3i5JyE1V17ugGyLRQ8DTfH0AqpI3VAKYquirLxNhUzhEEYXhNbjJQMdQxTdz4zMDbXLQ4TsstpRO/80M/OzfviNZLlIOgAQ1VEOSwjBhgaqR4MDY3rbX2jAx16yL34a1/oUzr3pwu3O7+7MeLEVL4bIPG+ZGOJJwl3uPPR+DcDRPi2HT3HCRYDAHNlz3dsIdD0bBHsseLLrzvhHCRpDIDR9M85hfQOcKPNgksZUHS8GSLzwYURQ77sU7EILhz8XzLmzZ6+6mCyfiFfc4oFnKFTFssU4ew7K77GsSxjJ1Ry6MrNQjBiNclEvArrUjd33QQt1edKEU6GEphj1vL0SCnmif133IO/lTSoIol2pzHjDQnLkmEOer+SpgE03lihtZGwB/WjMylTF+nwh8Nlaz538/hDt4PL153kEI/q8lkP7e7UdbtX7QgzrY5/3+236R03uPcOjIvunej+ITBgRAmVC5gKkiGjB2ksZlCXvNsPfbj8Er1iv1378Apb70f9KHs/YvP/mYD5N25hoeqGZu5xIMFkOAY9En5d+yYceatHBhbP0g/FMb9gZ7wXYBzfWEB9REuciFZ8ZoFX7Y/7L/W8+Aasw7y2040q/YDwMT5wH3n9qQmYRCwrJ3NDZiyMwCNNOi+XAuBsNb9gDW2ZITCUv2EXvZBq097wJkCbGScMQ03QUbJkVmmJK5HC/7sGzd5uPCRvOyjYTbg594/Jdc0KPT7ftiuFj/0+C5l2HLuGC87MF3k39V+68eAc047tz9NKy4au2za6DH9/v/ng1GshAaEqYZbsYSX3fhPv9XPvePbdhMvr/61Ufhqny58pX/HfQuiA6AQCse6CA3QUhRLdStlDOtUjYOmOT9nzdFVNRhx21/Yd6naizOiOkDPdpYICQeHmyn7/ivV2C9EyT/3Z1g1E7WzqTwVpIE5yTkgbQ/bcO93G/fK2HsTNXF7G2548OH5C+e+Y9C2AhfLX/1OFy2vz74ggMCvF0LaGpSt0HZqpb3KGQbuyAqqqccUNGUmW9qYEStIKyhSaRaoFr5MKvCeueNwYs10GoXjO8+A0ejex/5qAMJ+P/Ihx3vAX7SL3Kt6zEoU7nYoCX4egin3dr5X5ew1nlZ/qEFm8033RcdUB0lC/6EItVAWlRXYzCccpkXBqtCwZhmCYcUVLeIQDcrl93XJLyWdN1/GsJSdDI5cw4WyhXv4RgumpPHfyGEs85HOOPCvc5pueTCm/HA3rZhvvwR7+EY7k6PBbfF8E7v690vPAVZZ7uc9kFzxVBzAUSkDYFAlTMXqFKZEoj0VYMiMh+yD7EfpHKeQeOz2Cthf7WYifLM4rRixu0zwSU3P2disU8oEzMjGCrEi+qFQ5YNRuW0B5vDl5Pfr8Ba47vRV56AcfX71s9GcFvzZx79+zEo52R82gdhwTxgtA3PiGEr3vJTYMVfZMGGdb7zxB978Kr7TXNDQm6Pn0s92JbbwZaEneB487gLm+bmCxvAjZp4QYSwHC49s2RD0k6aCbDnHzl7JJx2u4Sw3dh+aDuE3frK2RUbNlub65s+3OhobS2EpWDZXHYhaa9f2LBh5L7k3xaCCBeDY4Dunw4/GQLeGVkB5p35cN6HNNqLJx6c9D4hPwO827sWX3sU9iqDyh+dhaw7qu7UgR6OGAKukFoTMEVBZJUoZ1rEaBRdHtPtgwhfbv1t33AftiN/9vDwr8X2ozHkhz2o5BYD/kFx+eEc1sEc6kHo5LAZL6ogi8GNCsYw1WUAhKqfN4AoX83aoAVz4bwNkyAdbLmQtn+QvNQGzZ3IfyRhnExsABGJGB/mrPkYYD68iw/FcHd0u3c/YJa18/+xB9+r/16l8+uQ8noSvgxZd8t5tw84ePRAxFpfC0CFeS8rw9bwNeerVdgN1v7ZuzHkrvLngIWwMMw7zYJJrhTr6DZoieYB7CV77Llw1DnKkRAm7bELoBKFcsGwDI8YNuRGSAwL9oI774HW1MGFveaevQucsiv2gxIW7Qd5UEIqT619MoYFrp595XMwTF4yv3wWUjvpXA3hWnvQe/F5OBbeef5jEm5rnrCP2bDnFtSsytXDkg1n2z+PDVzzHjjz0xI0975f+4wNuRw89Afn4HrySvC8DZSFm7mAoWzVBFIMIQGTclHcN+0qNWa58gPQ22wBPzwDDkdYw2kVtqFWVRmwVTk3QKW5mfVBk6XKfAy5s1vb8OCyF0Uv2HC3c1paPhxtF8xVb3uX2HNhsb3sLXtw2vyof6cNF8zb5H0unI7v93/+YZi4r1X/0IYr/rfSL3ighjvhWgiiRyAGoGKYttsVOdopYgCFHrSqq35uAHXVzSzQe7pd8kGjFOgGbHjD4LwPqf012fPgPs6cf2gNyv4d8Qqw5C/7AFosQoDc/Yh7Zwx7w0/7jwA3eq89/x0fLsV/dPbzHmx13nS+BihDkQ+BtnKpg4qK61NBgZQIm27eBhGItlYBMcQnAdVSq8qGXXO9+m4T5u2rwzckHA2Mb//SGXjbvmwnLsjgjG36cI+81709hNjKfHy4w/qk/7PAnbKq/v7zMOh8oflbEnbM11bDBuDuriYVUFUhRQoMVUsV0El5SjlaqJ7N1gNTFN0KQzW8uRIUUfbh1Jt5M/KbReAFhWmZqmgAw6kBhzoBiErRTaD6JFMouI8EYRMUqSHVyYYgbJGoJmiWVhUdWGv+wHk5hGPWR+yfehCwVsJ7XNhzZrnmwnBfb15z1zwoN09hxHDC/9jxz3iwKd8Iv+HB2H3d+upTsF3/gfXtJqR9zHyFghkRyFezWvYIbDqliv4M5L2slf027KSYogqarTU0CVk3iya/AWmsm/o5UKkq8zTkqypVAWyulqpzT0AWqa5wIK3PNxafg5J3JDjpwjFjWZ3yYWJPvIoLC+4CCzZssxVv2XCHd8a7XcJJ52fjX/NgefCz3/4PzsNW8N31P/hncNF4wfid50BFm+47baBGS0iKYsbi/s/GaeaIJ9Nne5/Q69YA7uA78xaL8u8Y1/qPptjt1lv3fpBHesvrfgT/3lzJBx0/DLEMpwQRRdXwQNXyLqhAdfMuUFNxvgq08yALQKSaLSyYs0p2yYWxP3IBNE/zdA9EkQFlT+5424Cw9tgK4Ub7dfl1H0hLtiFhTi53VpqAr1LlAhVVyx2gmXXHfYoIvQbagHpuw5Z813vbhgkb3g0fRJD7ALvtLXc7hpJXVBhP7D0A9vwde9eFOVNDALvulgeAk5PHoMniZuzGu3I3hoWmES54kFvKB5h4GVkIReYMdqJ1Rj6klUvnvheDBlL5ULKXrONt0GLhCh/yXkFMMrEnTCQsJosxwK65C4COJrUQ9Kn860b77fB1D7L03Yfe9GApvCO5/3EQPd0tDUBUqNwkbJkZ6sML7f44lzmY+5z1j5s328zgMMJTPMgDFQJlBqoNDKmqDqhqXs4MEDYFgU6ghrkJuaW8vA0rzRV3xYOxPZYAW/5WuAWc8E/4xyRsNtcBSMJ3/NgHEd546i0PSv6SafogqvPpUQvwqEyZxQqDMStymxVvTf8aFakuq4BBgAMiJFUVUE1lZwZMrHE4ckA1cjIXzIrpm8+CdKVcAOaa8x7ANfOazFw4756XGy68lbwZJj68EX8z7AOXh997pm+DVj9u3f0k0BGJVgYCArqAhVUQ0ogqFjdlQVVPtaiAqqluDgiPRl4HzRaxakPmTXqTGMbhmLEJp6JT8SlgyV5iScIl55K3EYJhGz7ASnDMPhrCO+Fb4WsS1oO37G/ZMB8eiVdcwJt3ln1gSEc5gE0Nl6L24SBkPusH34dRzZvzxISbRZKGmHKui9k8Kj5XpjKtxrdEA5CiLQAM0RdtIBFoBlAXvt4HEmFpDmAItASYIgeqqzqqAXTVUFVAgKEsUD0V5W1YcOa9eR/0SPP1EHasnRhgMVl0AcZ+6u/ZMPJ3PYDcuRbHQGZtNN+NwYiOeSsKNFO1xz6oaNLajUF0s2aagLAz0gbQH7d3DRDVLN1rgvCz5m4MmJPBrg2imVl7XcCYRLsOiG7mpSmIcmamPpBOqmkFRD13xhFQy1sTCVpVa2KCaufkwNgb2wALLMTChYkcx2MflFtoUZRC5U5suO4O4j+VkLvFuqS3jrVOOYCvzNwDIaec7weff/afiwMpkn03/f0M+fuZ42I+vJ/Vee/n/5psP5qI/INi7mLvYc/p4O2+dQgOnvfeb9rPocw8uCFgTD33hC4h4Kkgl6APSsZcH273Pz149EnIuPvxh0JY6px0V2LYNHdi5UIpLHklG/BVDHCt1n/oOR/2jNh96TmYdK63L5yD8XCz/+5ToAXCUQ7QoiUiwKSRd0GtqrjIredGwSmcVfQ+nDd+94X/5mnI66WHDGDLPBbfJiDtjhhL0MraOT2Gd1bnH5kHdoZFFfXa6nJz+QXIrHxdJLBkPMBPPgqj5h38Qw9GjMKxD8vySLzowjgahwBYAhHCFfNFO/ThbetrL/+bdUh5N4kfgvXa3nAjAuUsmSdfgPsav/L4f/FZOFZ5wP2UB2vWnjfxYN6cCwESO/EnMYh4TBrCt9v/0xOrISTRxebgBcj7a8bFl+F6ZZRunwMM7LwKAnwRgWpSQL0R1s264iJS2if2OAiRGjd5AmayD/s+uXlg/Gdc6xWKHHtftVUdlKfIqrDQWWoddeB46yda5x4FXcrzn34cVoI7vZUQbvjXw8yD+XDBNkIwgjkJ8HLw7IX/OYT14LWn++sgvK1wGMEo2HDe/cegDURN/QaIoehogOqq1UkxN5sFAx8pJqiYwdTQm8gpxA5gKqlMyMuTaNwHo3ObedKHB9qPPvpfHofF9hn1SR/O81a8HULKXpyGsOgt+csxzMuJvQu843zxud96Gcb162cvvACTzvXuRR/y6qi71QZhK1/VQXVoqwFFH7kHSBXhgCjPIGtRwZxG6DXIy5k/SWFheLR3xIQ7zJ9q/IPnYdK569EHfdh1c1f34E5ZjkvAeft8uCth2Hzb3fJgQ35j5QvAO8NvPvLlx0BFSfR2CFp/3N9cgVxO5PgPQISi6MOuqkY+ANW5ZRmfOXzDm8+5OY3M5ZTIZsYrYE5TNbPVojyNwGtiFRjgCEBURKq1gETYugOqKVoaIIZaR28CNVWIHlWLoktRUL+gEtVTHVAVVVYWLHXv7v4NGxa7D37u7yq4Q37K/wXgGlsytWFH7sQjF44nZjjvw17zHd7y4dvt3oV/8QyMuLYe27DbvFa/GIJeVu3xawCqnVuAk6eTBFRbRXkHkKqrbFC93KMBDFS/QFRIFEBPtEQVhFQuLqhqFlIHXNEioDjDAjVQSVYHDH3VGMJy977yp9vw4fYvf+4/eRyuV7N4Loa0WlS/L4ZLcXFVItZcuND+ahz68EPvTx771wL2ePfC+YdAsNtcC0C1Jv7eIghbM/UE6GetyWD6VA+nI7vvlB0M2A7XPnHL3g/ePiji/msVic+2vzoUrR/kN/2/DddBB+HWOH2/HWXWJ1qQ8zu06EDWGTV3Q7he+17zjy8ASeaNfSj5Cx7A2BzH4xhK0wg993MXYM9Noqs+jPqJdyUBNVQya4KolsoLPohIS3WAPt1CZ3fKUNWbcguXc2viAs4k3evDyF9rXvJh0rnWO5/CVuei/E4LRt5l99U6jOqXrVclbJUvDKMIJr0r/qADO/yw+ooPO41LjVeA9SiSX3oGbrhv+JEHmTWJ8xjmpwxso6AgcNESLdZtmLjbrHuwO3i3/UMHsPL+JAItmUsWLMg7OzJJYNs8f+4lYBIIvxRDyZ6L523QZDF19pI9e0/CXFAK9RC2u0Mrfhom3e3WWgRaXOrOmaAFc6sLBlBnVQQURWoG+1CzeSCimkFsJochdHM6wrOIzHyf8w4uALMIPwXVL9SvxFBztRDGte1GUoUb8vvBn5yDZWvZWwL0uLhfG86G3ABWHNNdjmHcLJjdNppD6+JjwHA3SHxQcV4wovmlxsIANE9rlepAh2JhnVKdigoWFoUIScp++92sv3yqhqZWlaMqoAVau1SDyXBjeNWBC+GLT31xHYZW4m6HoPnCEx6c9aV/IgQppW3EcMRdkkYMo8r15qU2TPytQeIDLWFpHmheqbbQA5EKU1ggeiIomMqm1LDT61LRVJUuLfq4hUedCuCJRDiw19801iTsNOLgWytgBsc55sHV5vV4LQQli3arU+Ed4fEY1uSN+LoLm+5V66ILYnW3khQGJFIhCKtkLjRBVPSKboJqq5ZqUBSdmRTV/gWkPpMr3kc2Zoa6fGD/PpJjTnkKZgbepApIUTjaqYhFBJQ1sySBpi7nU1CBls41gfJccxHAnAuWWqCSklu0cc7JhT6wqsWlOjDQmnMJpK1h9GYCI/vaykUfFKUQYDFcjA0b9vw9L/VBBCIG0N0s3PNgqzEMzoeQxbvuZgRas+CREKY20OuAo8x8CKqXu5kEusopuMpVmLUBP3eyMjBQq1kNSFWQN4F2XssK7CfIWkBfNbMq0MvdvAIYeS/zQHXyTu4DtZxJD7bd8+VvOdfzRKcAACAASURBVDDy1sOrgBEc9U0XRuHInnhQsoo2VAAkbDs31q9IGFVu1C+HQJgPMgu0eM5fiIBQb5UMoD9FMG7VTDhYlT5b1z8opv633f4sNuXHdPtRGvL3H4YPKnb7/xq8D/bX9qdB4eGl02KX/rTRp6MqIFpFlfAk2apcb8N2+urLz7uQT6k4J1bmTkIo2SVKMSi/+PR89aR/TwhHanfZ9/swH5x0ZBOEY9hHXFDl3M1DUDGW8ECYouBQH6rVqWiAkZugGll9XAdRycOxC6KZy1EfqI/d3TrQnlTTHhBN7J0OqMa4vyNB9Cfmrg1URvXtFuBOjN0G5MaOccODy60XL3zBh70w8a/FMBcUkfMoHPmEUJJzbknCUfcueTaG0vBEcG8Ii41T/bMuzKVHyrdJoIKde7BZ/qE9OAdD96WX/9CG+WSeeRtUrEKAsT9xJzYsB8dcU4LBKe/0GswPT/ZPt2FpeMo5GwOh5pR6QE/VFIDEE4WDZUyruWd9uofbyYzpwpweeD8z+LMF/NbzDiIzM8duSEgHhEtKG+jTpwPj1npr6EBqv/nE13zYDNdsANXMQ2XD0eRoCLAZ7dqjEIzyKfvMk3CUu6IPOaBVzcZdNmjmQrgcgVpVfj4AtVpUNVOlIVYBU5SFpOB8H3KTgU4UixkqUqEKgBplBiBCLNWF3Mn9PICt3sXk1TYI52L8DeC0L8MlYI+iWv0Hzg/YseFtZ+hdlVAyT/j3hmD4p+rSgoX0ZOu0hDxQIX3IermX1YHGVK7UpCIcELawp0xqBkbRZ04ADAutADGcUuoapCqE7cqVxgUP9sI3n+67UEqEp3y44lz190I4HhzzABbNI/KYD/nwiHPKh2PWPcZHfJiXJ93TLhCXekYCxMrMHSDBFRFFztoBZNGud2C8zfedH/sGfrZ/35DbQEpF1EFU8IUEpObobSDWw/kAVuyPhg+XYSV9OP1Pz8Cd6S/W/vPn4UzzV36qqcAYPuD9XATL7Xu8j/tg9O4a/A0P6C21ViwQzUJ1bKv9ZvziOVg3Y/e8DUaw6ANMmMhMQi7z4r5EJ+w7Y5iv3t4+HcBy9c74gQD0/tHWqbCI+HMfiIuaBGYqjvG0XRB6RepBrSoLSCi0CwzlKweI8ZQFoLqqDmqmbRDTVhXALNZDQmS+CjgESkKe7NnbFlyxX3r6DzwYNW+479gwSTJyG3RHdwG0UPf1EOaS48/eDiyHdw7ut6HUvq16bxPm28fC2yNQ5J2sAQxxRAiURW2aUpqlSA7rlc0QlYNG9y8Kjv//5RD8Fdx+lMVu/3Y38IMAFfPm+/dn193PsRTqYgl9YQKmKqqZy6qvUlDuxEhj2OOy/f0LkNbXntwIIW/msR5CKShJ3YPMymyAY3zM+wxwf+Pc2n94Bq4F78aTR+FG8PraN31I3W/0f8eHtfQNvz8EUMWCflMPfaqC1qORB6AGqkYEojJ9XxOe6AKG6qo+qEbeFiHgTA2AiSk8UIka5FVgoIWlALBHg10DNjqx952noSQ/HP/846DbpfABYCRH/tiHOVsPNRtW5IfsTwJ3Wb/q/sbDcBd3PXv7Gdj233n8nTPwevx7T/zzx2Bsv2u/0YSNzpvBSytwt/kzZx4NIYszHyAn8zMblqxjseHBmeTcmX9iw1ay7Y4k3CvvevioD6+kv/dUV8KNxldX/2UF1OpO+7oFVKlMjXeFhMLgzhZqyWzZLkZ0FrnPRngWoafsR/RJAV1jFKpnBZseqN5UbKNWUHGqmhrkPVDlUW+nCVuNOPmOA9eTy5+7+CwY0vROeaC3Sx4hbMZbchM4W/mbYT2GldZJjnjwlvGGd+08LMXr4XkfLte+XP7NOmwZP3ReCUCrUqUGKlZD1QMGdHC4acjVTEc7wWQIok7BoS9VkFugTBXmgNYYt7YDSJ1LK68Cl6xLds2FrXAzXJNgNld8M4Q7go/KDwEfbn4sfhLQyvqjPAmTpOj3vcwf84WH4cLql8q/+QiMgo3O1cKQR6oHVFXMcJoCkKAGBa6lfFrKBhFSVhJEV3OFA6PGdrrehaT+Vv0lG+5vfZq/8zm44WyFOz6kzT17wYYT8oS34kJqf+LBX5DwIfkPPNeGd4MrTEJ4p/3tC19Zg1H/pUq3C5vuxcF3q6As1WMVRFl08EGFyp2ypqOK50ECBUA7g9iLv2eairlpyC1RA8Aq9MxFVwxAdDSrFBb8DaIKR+Q93cpPgVH+9LP1GOaa81Lz4VR0ypuTkLqmlIA0Kk9+Ehh7yuNx+KH13Qe/5UNef3X4+5+Dd/3Xg28+BOvxhUdfteE2+WHvLMV4KgmTZOwBHLHK9mngHvfRJ//JcZDWfY/fdh5eH0buhRA2jW8E/8fjsC1fMb7UhHF7q7HW4CAVbaJiUEmhKy4qKp4+F4WaXqKiKTI5vJlyBEinaoAGki4QqYayQVTwVAx5nCeTADaqsfddH+acD8vPuDDvn+ROQEhR3HcntzMfTlqf8H8OuNv7tPwFHy41L3Hjs3CHv3hcPAhvmP9n8t8+A+v2a5UXJIg0H05VBTqHHPBUTA25GhyA2fe3feP+5zfnt9qS5AP2/xhuP5qI/M8Dl3/wdiuEvr83veWMg2dODbpK1Uzfe6j6APSUC/RUBxdELCxhQZ5k3sSHPM7JJZTckgeQtwu5To2SPW+DsDUbYM2M+BKQyBcf6T4Ge2HCFQswpmpS5SmxRDrN1RvEhEBCV9WBVHmqOF5TAdBXaW4DBhXlAv0pJD9QaS4BlJW7oAIV5yYwVDJ3gAZ9JYFeAdXqtu5qHhR8dDCJJ+EkhlI4x1wIKpwOfSRiLYQbze/xdeBit/fcv3gMsuF69E5I8eBHgCUSrQlz7rwrfJhQEMOItvDx9ouuxnLiZRIIJ3EKvBH97spvStgIX5V/9BQIK5eTInKYGep9AohpJC4OR1b7EOlBqPS9Ebp5aEGYfl7tn1d8vlKojNFQdVUFzdJamg+qiiSE1EndPQ+WguXQCGEcFQZwIrM4d+GYaXpHPNi0Enfiwnr3m488G8K1+tee6D4H49ZW9UYbxKqoY1HkaIsUQtE3vp+zLbZpP7yYqp/NUg2qUVSRa0Otr7VBM3RPC2HT3Eq2noPUSmUqQcZnw5Me3NG+wy8BaZR6AG9778hND97yvm+/Dbzcf+aFVQlXk+iJPzwHeX0iR4CIRSQiEA5Fkdu0v10NCnESMYP+Z8z2rqqqMog+q1ggulpXa8NoOIr3AliMjNCwwbAXbcOFNXlDTiQctYouAM2Z8+djWPfXvMyFHecV70s2bBgvmcETMFrdMm84IBqiigEMmT23h+dFUad+kyHv5vgzPT7jjzAoi2Ic7KLNSTTEADCKeS/6ml9yQTX17nwIwtetkltc/5yEESM3dUGP9RhgniPxMRcmzQKR2uL78v/2Ial+beV3zkJaWWtffg5ES7N1H8ZJ5meAbuk2gLCFLIpXi66YBRZZ8iGPC67+xD0fvgOsDf/46f/lLOxal7xXzoJqZ+bEpyhKLJ6fiB4IQ81ShzPmu/2cc0LBXD4z3TMIe8hBxJLpfR5OizFnDlDxPa6QWgCldiHvnLmZm9v701ePdFu3IXcUhFAK52KA7eGbL/RDeCt89qH/XsBeP5Fv+0BF9agduB6m1zNzMW41qu8XyBnve+TPv/1FI/y/QtuPstjtcO/mwf1/tu2QYT7wHbfmVPaJAYrNFBKgMNQgEA2gKiqaB6ojOqIBqpM7mQ0T9th5FPK4ZB8DdKmHANlUd1sPF+wlD7ait/2rHqyVo5XeBdjxLqaRCVqikokHGHmcNQFTGcoHhlSn0H4hlpKqWYNVoV6Wqlh12TdwM46yVLiiOd1fAyrCwgFMYYkuMBRlDRAtra8nkJvKVzFobf2MLkE0BQCZzMJJCCW3xCIgkqJ4a8R1+20JG/431v/NM7Duvj7shyB6mqe7IOIFZxkQoWrnJsy1CurGcTAJAYQpXM0FvVmy8SGLclfFsC5feeT5GJLWt+IvPgFja9tdS0DrqDB3gY4qitXK1KmCMEhxQEW3QKT7MYQ5jbzLNyPv2YNvTMe5zP6cMqlQp+hzdwCDhmgDtggLwy1CLQXhaGXdhKydOZmErJ59LjteEHkA7Aa7IYDuluw5F4xoOQa42Py6+zUfdqzvO185B6qb1H+4CnllEu81QauqVFUpoM4akE4jn/K0SG8/giz+zoqoCw9UQAcPhK3VtAaIvhaWgDGTVpbAQktHfxbO1s6Gyx6MnIKZ6634LT8BMivzlQdL8YK/FMNa8v1nQmDdeaX2lUcgb6bRRgVErKKsB6KryBtAhSEBCGuKFET0pwbCwgRRL1S/VINYJECHmkhAL5capRbs2bvWTgJjMw13HoYV80R8QsIV74q/ZsOp5il/BTgamv5JH4bmq/LrNmyuflN84QUYVS4536mACFU1q4KoqPq0LWlQ1D6oGee6T5Ni+Z/OB1EY7HQqV1rMjzIzlTOjkJEVnhiACkSs9YFEdHQDhFlqzw+ABoNSE1SCq0kw7MU1LYatYDuchIAnJMBicCK+04Mb4QX/dQlr8ddfeO4pSIOL7agJeWi0lwHRx9AjmPjj/vizoIUF97ke6p7uwyga2XiwYC15woeRvUkSw9v+d1/+IrDtvGH+qQRl76VbZoGE5AUUDhHgTWVdwTkk05ocwCrTA/uNaUBxENOUIAxqU1VGR3SAljC0GoCwtCooX7VVBHqsfV77LCgzl7kLylde8Vzovi5BWZo/L2Ekb/ibEjaTSPy+gEnvkh35gJ/1RiHgqzQLgQB/6nDFNzEVefPK9x38gzlzeG8K9da4ej+o2w8Qbv2ew3bHuOUbfiy3Hy1F618sR7H/qcMe1K0Dvl8sVSzyFWogDBoiANWhqZmAI1a1KojhwuCoD7elDzV/+VE40i4/eQ+wFl1hLQRNah42jK2i6nst+c5jf2TDNX8QhgLS+ErlDUCraTXNBdpZoAygT2NKOepN9XbjaZEHBOwboIP35CCMdJBq1gaVYolVEHXa2gBETZT1OqhUeHoKc/UjzRMhHFn9FH/v87Dk3vX5B3xQkZJIyO0szGPQfQ0kDK0X5Z+EcLX35cf+13XQks1wGIFItSJSSbRUb8OR3mnrYyHMBQ+e+fcfBN0qpsyelfoAutR93YORueEBXPKDJ/4HYLd+0Xr5MRCViT0KQKQU/bmJGmQ9oK9k3gdMFasmBVLhT8etgEZNUZmOa7EQpSou7oeQQNExXEDos8i8wsFlqlqkNERNtIGyKItVEDUR6gbkPWINWOqdGpxN4M7Wzz36D5+FPf+ovxLDfFjUFmzJTV/ZoLmZOwbe8r/w2O/G8HbtT5761y+Dqm4574YgfNGlC0IST3XVg9wDFVLIs8b4uDCtuUcNplcqb8rapqIKRKKnGSCq+rDUABVSFg7MWeXBR2KoVP7u5xvAOBzZABfbF+X1GI62j9rHPThm6m7uwZtm8MQ/D2GD19z+CmiO8jNAVHRba4BiUpkMQEWqkgeAoZoqhuIaKOJaSdFXLkG0RVeYQF14mgW5RVd4sFQ3+3fUYcH4ZOuXzkMalh5fOg63sxRjg4qUp3zY8bY8gG3vu/7/FcPl+I/O/W/roPe3ueKD5mpdvQeqMonHDWCounlhqPt4oFKGUyIdOW07TA7lwvdFdmYReYUaEFOmDliiKWIQVeFpq6BSLSwZoFnzwyUTFpunVz+dgOl/Uv2CDXPenAeQx3msXFAQ4sOWG7lf9uEKLz70nAAht7wrDmhV3StZICw9LLXBdD5qPnIejEQ+aLmAW7Svak0t1HzI/ELPezM+H8c2XGn//oX/8SwQX/ffSgA3tycSiKipVaCvvMwGqjTzlKLLwAIgoVhf9mVAZ6YcDhaTcXNdLJ6X6lQVsq2VgbSgsBZtrVrqgBgueEcMuMP8aX71PJxIPiw/FcM1f1Nu+aBM5eGBLnU558Fl+vEXXNhrvfryV56GUfpO6/tN0LvaqmaDsrLqVNZX5iaogWrkKRBSU4PpdfrAvvpZ9IEY7GEE1jj03jiw3zhw9sEA8HDg91678mNo0P9yRVP+vJDG+8Hq+wN5eKAMjOkDXnicpvALz12ranWghRQR5OVJa+xByVv69lEJpXYhVqCaRa5IBJoPFHq9QObv2ls+7HbelRfbgJUXVINpPhwPgCB3swpQVs3pBO3TAZWq9FAODzGDWKcQcwG5YYiKcACELVoURWExkIqucAFHC3QDqGppKYQ8JBAGiMa8abTBcO54+GwIc86yf8wGQkKA3FNS2aDFRaf5tv/2yhshTKLrgx/6AHk08YFa3p4AysrNzAVhzLUX12Dev03e6YMeTxGKJLPxQJNarLuQeaNwFMNOeKn9vceA4aiynYCqZcGoDJh5MhkCfRXmITBkVUluQrYY075eY9pfamJTn76vc7MYC5MqdYCpup2JNT1v/9UFIYUrAiDFEyaIqmjobQCtpvugetSogt6dNxdjmAtX/Ds9KEnDX/RBn6pH7TVH3khCKRKukLAVXOK1EMbeunMlAOHn9rgHqjxZHZlAJQ+Loh5VU11gqAJVRDyHPf+EmUxoS/SAWHiiDMLReroB1IWnh5D5uZGnsBQcC094YHr3csqDy8HleNOH5WiZ5RjuDu6JSz5syOveNQ+G6SvenwrYM7f8GwFkjfHqbm8fUifK/cwDUaNPjZvFoDPqWDErLktEQZSS0hU1EANN6g6oUNXUELLaWI5CWOytPH57CGkyCZWEUrPQKpiTc0Xb0lT2VoR7z2wCmb1evdIGgryWBUBNVSdVYKC62SoQq3oRgatZKgygEC+pUiAcVRAmFrXpfCkcwhptEBXRFkMgFb5mA7YorsjVrBKgwBVDwNAqJQ/mAjO440nQ3eP+SR/mrMKRo4mnXMj9gt9hzLVzsYRxbS15G2CoVrMEVLuQH8lrWS0LYH5wvHlSgu4d8UyXgk4X0KPC8c3CzAeYmBvxNR/G6budH1iQr46qOyaQZrVRB0hyJhLoqTCPKBCJGqhUFTwJwHvWPZOiyK9weA4Xg0JlWqPRFH1ACkQMaqBZehtUDUQKymBVs2DeNJ8vA4uhGZckKKlkLkFFKgbQEs3XbNhxrr580YMd53Lz9TYI1CBrgKpOnL0W0MvNSQMwVFU1gCGdafHijNhnX8zGuPmz+KsOG+59Y33w9daI27hl/3u/z7jlcz/WEPtfrmjKrZ7PrTfy1huc3nJOesvRgx5nSrmohi5UnDBoCxPoiZ7eh7tWf65dfxBy985vP/g4HG/fb3/CB0JViG04SGLQ7AKaVu1i2s3J49zhwV5Uas+dhSymrezp+V0A5JSIRs6qgXFAGKIi6lN/c0iRs7OAVNjT3FRzmjuvihbFgrQK1LW6NgRSWlobiIQrXJivnArvX4Xj/oO1v/fr8MDw0/+17cKOVQqXPFBxsQCRFKZcuXmsJAizkBIZe9uPrMcgOoS5B6KrDEyYL9/jWR7c1frpn/rVM3C7+RH7UxKuyK1v70rQHOETQ07u5YDmC1/4gI1diNPwFCuAo1YzgHYusxCo01IGYNKYOjCO6ICQolOkDKYRtcEqJgirMLSz3LIaMCABUS32qy5dhiDk9D6ahWFU4RRotEWqrRazQzRB+Rj4sBzcbX50FXT5Efm3vgT393/y/N98GHCOuic/D6NwO9yIgagY90lSEODMW6W4BAiXs3ggQpVkvw1EKp4MKdp+qkCXiuoV972ogZg6ktO+d5UW18mAqnCBqmiIPqg2sagDbRUq4Lb+x+qP1EH5Uv7Mr8F9qz+x9vM27E6r1EfO2B/5cG9y2j4aQhKtuQBXnCvxFWDOnEtKJqj6KCQAVcOcLsB2PgTVV4bqgKgSKJ+Cy7xH0X6WUqRuZgu+AQSiKgzQeiV73oCl0DJ+9SNwDz9x/m+fgePR/fbHPw9X4xvhmoS8qViKYd6ed+djGFtZrIBF57Yz5Ri0Qcmcew7UaiEDLGqY9CkY1FJuIlGYhSMhDNIpUjB1/FSkBkBZNMUqBZTuACl14QOuaIoWABVtFbDEUAtBNBYrxxtwLP2E9Xc+Cw+En3nQcWHDxjZsyKTylQTN0V08mAG/eVCohCl7/FwaAolKshDoitUFCUdanwhrn4e7o089+rd9ON6+X308hnejxF2XoOxCtFOTmtQkZF5m5yHgFf+DSJEKwM3qYxdwc7I2YN6U/WyrGEiVWxg8YYoaB8xRQcWKIWpF7D+9PzNksiycqUNWnF8RddEGBnS0OujBUrhSB2n84pP/2aOwwxHuCWHZ/5BtAcIqoHRCPOz9rhVhTpMOBueUC3Qo5yZg5tVxCAR5PWsA0U2ZXF/ZFAhlmyIu7nI4kk45nDI9iFrOXo1b9r+fRlrKvkE/iNseTskl74HaD37+8J6/sttfRh/5n3X/rWekNwfwMFS0f7tn0FoBsVZFE8RUN5iq5motoCoaWguuWpH75Sdgrfvqcy94sBu8I9+0YRzv+gDCFbGQQCQkgAqKPvJF51R4bwyGdTK6JwBlUNVCoKm15log6lqit4BUVLQ6UBeOZgNlkWoRiLJIpippUksBRBH7OVpH7wNVLdHbIEzdnfNBJKXBQgCYpfZCCsKat5cNmHS3gzUbtgdvmF97AiZh6m/ZkCeZO/FBS/RQ84BgGgs0kcoDZPEA7pWT9vBpoEG1IMwRQy2CvWjYfN2E9er31/84hB3nWnjJhdwZ22kIwtVsgDwoHmVha7ZmA6EqYv+wcBxEXQTCBKQwRAyUp9BdR6uW+oDUYr0NOFqllABtvTFXBQwtKQVAR/NKNaBWHBeWZpQGgK+tlhzAEEM9AFparWQCDa1WMoBUS0o9oKP5pSICt0tNEMlcywgh9a+nlxLYrrwe/cnTsJNc8c57kDa35JoELdDdkgfT+gXyKAvzEPRI83QflJVbmQukKi6QBWXkFjBQzpSzvD/VJS+6I6bzVZhTxxJRFU2gLDpCAnXR1JvAUPNLNdAG88FSFdbNHzRe8mG38Wbza4/BnnuDyxI23HV/14XFaFEu2lBqllyAa9Y1uRXDUetofDSEuXbJ1WxQVmZMAOXmq3kINChSGSYD5YMa0icAUWam221MI7caqyAsEYk6qEhIzaFQsfNgpzroPP8ErPuvr/eBHS77b0nIrFG8G0LuFaWZc8m8PRfDxB37exKOxvf6H5UwVznaPREBbc3RbcDXglIXSISnA7haWw9BlIXUysU80oZATdhaBUAYWnFeV09A2BqlHoiy3prrg0hL6UIEyFJ3ARDxfHOpB8KiI2zYtt6ULz4NO8HVOA5BOTmTEGgKKUIo+AwBryhCG9tpDJBVUndbUNRc+MAqLdWEneDN/tdegC154cLLIezG19y3Q1BtRQ7QLmaU5hbfrJrKVj4QTU28pcwcoKu6eeFQOSoE0ilDoUFN+EAiVoUFwiASPlARhpYAsRhoA8ASFa0KmGK6uIuBFgGWKGsGkIhUMwBH6xdEV3plrgOZPWqlFgzL37zwxSdgJ7l84TUJo3Cdqz4IZ8oZaWIjQbnKBiAUvgiBVh7mEujmXu4CpirnEoix8jYFU59NkUIrkLKiuG4/JbAfthmH3u+b81vX+1uPH3y//+7w+/Q9Jt98z2/pzTN/bLa/jD7y9JY9B2/xwddboZRbi9lmr4ehEuMm9OYIH5BioLVBVXIvT0EleSdbhcwe9VMfdoMLQXQOrrW+ce6LNuzZm+G2C8LUQ90FUfjlKFl0bS4Ft/v32nBi+LHzn3kQlK/XFxwQrbmmUQeGc+GiC8R6eV6CiEqrCxKoasFcGahp3bkERKhbcy0g1dpzBohIjxYCoFUyjCaoihbNhUBTs+fboPpabd4C0Zhzlz3Q/MXIdGAS7UabJmwll+M3YkAKkCAiYQsJKpyZJGwRw567Hm+5MI42wzUPlMwqkwDy/4e7d4+V3LrvPD+HrKrL26/L2y11V+tJyXqUI8UqOU5SzsxC1GZmU8FMVvTOzG7NIoAp7CxSBgYwBRiYGsCAOEBmUQPMQiVgFlsYzKzoRRapXTgRtVnMljeTmNokdjkPi4pluyRLarak7mY/L/s+eauKPPsHWffebhv739rBHuA2m6d4WOQp8nx/z+/Pzse5A3QZAmybV6z31+GqH774RyaIgQiEC8Ir5H1cinAXv/Rtm6IwHyaKVXFAxBVjRQcRVNxVDUSj0tI0EE6tyKhtVwerQxDjqrZaB6VdHRaZthVL64Ji10bHAmBYjVcB7IqvTUDp1cbHQkCvWqsdEGm1tWqCmFZZTQGtYmiA6FcmK4CMRUMJizQvYUMeYyoJzLXbwbUArmvh23/kwdzeiTZdUBzVUyMOBCBpYUoThCEQBkgfV7qAVqYTlsVZZFrm9+pwxwJwoBWIRhnU12EEoil0JQGGRDRBjvKoMEVKFwPkgFDosOfG1gcJ3OR7twMgM/Mod6Hm1LxaAJlRpEVmTmZmNpwYnLCPu5B5mZObkCd5mI9ANmVdAkxlkXa05LY+rM+9XPIKTVjDEQUATBUXJHkjdyE3sskigDyZ2+kArkd/bfzxm3DZnKz/gQvSmrMfgfSFAaBQaKC5kbmZASf8B4IzERxrGlHzmyDbil1LQEyrySpAWvG1Doikoq/oQFtNqgOgrUyqLRATtV0dAanq1ZogQjVZSYB+paGNQTYUo2oBfdWpTUDGar82BCaV1moKinNsvO6BnFRszYTb1kf/4ocR5PbcTgF0ERFQZGMAwlcMJYK0eZtNYN7eHdwegNTzaaZD3s2TXAfZl13pws3oB+GffQ1uNy8G3zdA+IqrANIv30O3sKhJW9pHLWboRbChTMrshnQZrCl6QgeaSkuxgKnoqDFgKFRSwFYGlSkQKo2qBwzUenUEwlCHNQNI1Va1BwyUfmUARGJYxF5IX6YgR7IvpyB1JiKAxSh1dw3YHrxrfes2zPSN6EoARWw/EJXXW74fwsLEBDktYghIGcvBkfcjLQVayufsMEvlHQg2swAAIABJREFUbqA8tKge3YImtPLp/H/f3vl3aHLnjvP9JE3+Thz5cUvA3Xj0N7D9dKufFS25Y/9Q/krumuDlj/GTJa/DBbOoh5VC4Vsuo1hjUbwIHTEQOhzvPRQ0U8jjk+Z9wLpz1qu/DlgPvv65CNa1T5mfcaEarng1A/b1K+aHERA9EJ0yoKidBWKgBHjwcPC89wUDbgwvvRrZsOu91//Wi8Bw5m4HgEm94oPw1ZYYgwyyJHMBg6msg0gUFB0IMycPQXQqaTUFUNNaCJpzPn4yAF2v9x9+DTbtLWsrglOTet24AOf4hbVfewWuGJ+8cNGDs8bTLzwTwZafodiQO7IwaYfSJgARKoFqw+1BxDsmiHjFPP4qnAyfcn/1y3BKPzFdNWC3X03XXTjfbV54/gXA3Y1uAol7y7sSgfQw7gNAIDyKdJoAhK4ECpB74vnKqyBGqr5ig2xXYAB5j0BtgRKobcUDGZRewq4o8uR7whEOyEE2zVwA1VZdwMybuQGyTVOGgK5EagzSz9zFABgpgWqCHEtbAjkLY56Alqzb90ag+menTwZQ0VdM7dtw0j6bPiRh3zmz9sTrcG9v/ZUTJuzpe9GmCUT73poJRKIQCCxcbJB2YRIULXwBYFLkqBvCEAkIjaEYgIyIyij5patgmcdc+PQTOqIJsiXHuQPH/fPDJxsgOmedT/tQ0dW+eA1OTh4aPf0KzJIza48Dpzn2TTZgO7rGRx4ozn3BpwDFK4rpCLdwccycmT0LQAkUS41ApIqraEBXGKIBmMIvuMTloBREtNLkXxCsTMqgRF0YAEzFWPVhtf5w99kU1uMHjCd+C7aa++3chPv7f+uf/RdfhHujx976lA0fDt4NfhTAvrthLGwgxK4YIJqKSQQKBSDoxi9HXzBAiXJn8WXYqX8Q/fkbsIjzmBYIW9WEBTLJ0kUPRGlREmPhKzYwzXu5BsKuDKsR4CthxQfNONd83Abdvs99dA1u61v2lgEnw/Xw3ghOD35+w7wAt+zNZ3bfgkf0J4InXoAtn9dqgAzzIPdA6jJQbRC6MNUAdqyrUWSA2j7h32vAyeFT1q++Dqc4MTgewYx161OvwenBgxuPGaCGOXsebLm37RsAIe4ZAPcQCEUADErXWsLb4g0QDWEV74HQFBsI8BQdpC0NEpCA6ABdpVHpgkiVUcUE2aaNA8JQDFUD2c/dvAfY0sgBoSmmcEB2REMN4LTxxPDzOohgdbD2W5Da80YOPG7+p//svzTghr7h3l6D3M5tGcCetxFlJghfMZUIMIv1kKj4Ew1RuAa7whC3KWIqQkArY1U02cSm8N0XJv/0x5gci6eRg+1RQD7cP9TM7wZs+Mmge+cx2l2f3/3Nh00vPz9q8j869m+Qyf1n4SO/0wdx1KBydELvTitLufsHuVNzT1mKCGX/QfTjAIBA0dUmKP2acewtuD/9lWf+kQmbUcXVIxBRNapEIBCREkHuZ2ZmQE5hUhdmYXCUrjSkC9XweIAH99af+/JvmkDzqeBvvQap+zHfex2utX7khOtQ7c2DbRtmjT1/x6NIh3GhYlXsign5YDadu1CxtGBVB6V/IrkHWNM++8xvPAc/F/zqC88b8FF0KdozYM1fe3jVhGPWMRsgHlw1LgF4wsAFoSs2HkhzYRRlUsrr1hdeZkPivP/idyPIuqm/8xLU/DOeARijX3v9v3XhRm9uVl1QwkW0BeSDHfOGCbm5MOce0CxMaiIUhjBB6sVCUXVPeDUPzvZ+1X3RBt06+fqJDZD1PMpegw02fveWAeeN+q+d9+CGduOXr1+AarNq1mw42T75Wyeegbgei/gtONc691+dA3YGO8GuB/vN9IfpBbjXO/s/nnXhin75/7wUwanJKfeUBNVRNhQDbo5uvnTzApydnH5rPYC49eGrP3wFTvPpZ37FgIfcX5BPB/C+9UP7ige5sx9cN2DPv/z2B8BqsMqaVyzg6zYIT9iKC3mSe5kNhEqoekBX6Sk9oCGbigGkIih8kNIsgyubpa9yJPuAVhLe1EURxDeVPWIgUgy1BSKoRcc24Lz7/Cu2AefNxjNnXfih/VfGBzbs+7veNSC1N8Q1QNXPBA+YgI1dA07pp+yTBsRctj+0QcbCFG+D2q2kNQ/yehbsN0EGebpwgahM12vSkH2O5iEfEuzoIANCYhCxYqkBVPRjwdqX4WTn01/+FRtOWg/yKRMwVYqnTQYiAoFEejAfLII5oDpF0RBJbmCCGp4IdBMeD//BN18yILF/FPzVW3ApDdf/79egNkr7NxzYSq+GHzdB9KWe26BOVdQI8sEsmDmwYp5ENwDnZHLOgNP+Lzzz9zbgSfs54/PAhUH0yo4JZ/1z3vEAVLcwESeDt413AlAGlUj1IA/nZm5A1VOjSgQMCp927mVGZsBW8tGLPwhgFu2+cfsLcMx6yH7Gg8cbv37hvzbgk+TGK6kJleF+cMOEffsyHweQtmdIA4SD+aQJMso9CSi6YggDpE2kmECorCsvAbaI1cJUrokhKLpmngxhrfVw6zNtSEfoKwOoGrW42gD8fX1nBLv+bmsnhvX6/TwqYc9L2+lFyOtze+aD0tnhWg+29ev9Sw4o7Zq3aoM2evi1z0o4aTxqtkw4U388WLPhZjAx3nJh17n+dhTBFleeOROAaB437y3uxwaQNoVlIRVNJQBsMaw8DyRKXZkAjXwpwHqiD8BEtikUN51DID+wqC6L3cjooL9w+Sxdq4eq3Z2m8J/c7qxa/uMtOaJALhXHO/HmzvS34srv/o6fefvZBrsdlbbunhz9rh/gJ9WbPQrkSwKDhKkcAzoF9WRf6nkddswL3l/4ICcX3O9+Hr7nfHL7r56FY8Zn/N94HU4YDz7XMOB49Jj7lAs19OD+CPAL47qwy+h1T0YFuWLRFH8l0FzQ9afNX4pAc58NfglQBh98+ZINRuehF+5/Ha5HV5+7BmRG9sXFGpxLz75w9hmI7OiZi2twX/LA6/d/E7K6dIUHG/7t525HIOwielromJkB0s0j3DL63IZV97z5CKDZZ7yqBzuD614G5EkW5AYIq6hGtht8bHzfhM343S98+02Q8U56M4G98HLrhy14N96+eOVNqDlP2b9mgG4+wGMBPKD/Cr8QwX7zfXc7gizMIgAlKtLUcktGeQSVUAsATjUb0S8FcMa4h2MeqIHqASyal+ytCM6bj3HShZxLZmaA6lQiNYKz+r0RwE7nA3MzgnvNh81TBhw3dgJcSOzb7l4A91mP2KsR7Hkfmk94sB7q0bGo8BkDzOOP3V0DjuuKuevCjvaNN/6nR2BvGEV/NYCavohsD+Z2bqx6cMb/XNS04ZT/+MZngGv6lSA2QeoFV3jFqpiqCQsrNfc9kI38zcwEGWaDTAdQdMUFOiJVfSCiIN+sY8o6gOiWDFZFFLWJJTSgr8SKCbvjOH2/B7lzqf7eAD6ZbF+89hKstGbBP3kLFDd3RQAnwqeDz0fwULD2RYAP7A+4GcGtwS0T4GxyzhDApvWRedyAS/G22F4HRZs390MQLh0RAS16Sh2EKfp5DGiyRwRyglcUTSkoRkllYRqd5qNFC/bSD81JCh/rkfVXt0EJ1vVvCDhu/mdr/40Hwtbd80BlUHVPRnDcOhtVgetmZO8HcDxa9bQAMifzMCEf5G7mwnFnPapEkPuf9n4ZyAfn7CddeMi675v6Gnw4+ODLnzwHunfKPvVFWIlq1AK4ZF0OLn0ZHo0eiz5lwA19w958AXDFWyKCsoIbktycRVAxFOM4sHAyD+D44HxkuHAirNtaADftKNiJQA2K8+dGQXuyF1yJPgzgNm87f/Qq7Hs3e58EsBtfCL7rw4f93N15GPY5/czjAawbnwl+xYUz5qeiB2xYmO+7V0zAz10CyKLczjyomRW75sLClFFuQ95YxAsdREpdNoBUjFUgj+ZhCtTqa965L4ISn9efDaA+fvKLnzXgWHP9lXs9+Gjy7itvG/Bk/Av2Z4Grg2tf3HwYFnZ6YfcZmI9+kPzhC7A5/o99T8AN43vWH5ug2D/6xl+YoOu/ePvSc5AEIvq7EajJPebDATzQfIpnA9CsSgSwHV2NbgH4xboiXYkEZF8GuQn5JOvMB4ArRzSAnqirARCLcckB3y6JehLRACCUhaq1DFI+NHUXQH8AsKL8XMbl8cX6n9wFwMmPYcnRdremrv8EGL4bedIje4VN4Wj/3wgNXT1rnjXPmq77U/m2ggxsuxQftHJbKSdi+0DiqlCIGIvyOICUStm3KM9WQPuCpTBQES6giT4ngIRt0QX+DSn/FMRASZSnAVt5TPUhX8y+mn4FdrcvfuWtR+B25Qd/FvxLuH3PB8+H67D79SsvvR/A7gPR+fd0WLQWhdfPO+acSWDdOK2v6HC7ddudhVAbVNxaE7Tpqi102GzseHMd7tHP6ccMmOky1GzAqgY1B053zrkrBmwGe57iwVp4pnnCBqVf8ypN2E1Tbx7BaeNMU2vCVmvLXOhQ0StRxYNj/rFQ2LDh3HJ3PdBbp8zVJuy7qSFMmA1n+rwJa44eVJtws32FzQFo/27l11dNmGnX3n//bcgas0/2noaZv8Hlr8Bm+wfZm/8c9qyP/+UPvwE7k6vfuDWETTu++FECZwePJz9nwkJbNLEg7aV6aoJu6vqKDsl0w9+zoBbV3BUdaqOKBXDbSJydJujowaoDu71dc+FAbmWDuQsn+yfMigkb4a3mjg7H02P2KiBdLIDt+la048I6eqRZsBVtmvtNUDqKXnFhNV71hAkb7s1kU4e1gW6cdqHSXx89EMD+V/Lziga3wu88+3svwmY0FX+2D3vtq29fbkDq3jSu2pBbJ+x7mnC6f29TN2Av3dVlAovxIsxCuPfvPOg/bsO+pl26N4Qs3PzN+B9D3t41b/WBBQPpg1iIOiOgIzTxGIh/o/y22gN8xVS/Drwv/rX4j6D8feUr6ldAGVS+uuJBqt/600ufg+uLt742Xof9v7xy8UdvQvK5j7/2QRMqn1tMhQ3r2iM87sDVemxfN6A2ribHHTg7vtc548CJ1nm7EcPKiTM3H3Zg5x9+ZP31s8DTeW/mABXGMgE5lh1ZARL+siSEMaiDfF/8w4LTmw5/H0Rd/dfqDRCR4qkNkH9npu0OILHe+9K3q3BjEmZ/+CWYf/Xq333/POzGl89fHcN19531b/mwFtwzqDugDk/Yug7bxnZzP4F7/DPmqgmJkzgpUBlVo+oATrEeVBzYaGyaiwTuGZ5zdAuwq37Fhv1BFiohnG2ddzUDbje3w7wJK51VXbNhVTvmKjokTuLuWXC6fVpf1SE1UhNgNpkN9k3QkzV3RYeb7Rte2oRj1nFL80AdV1yAjfgqCbCO3j8zgl3im+9/A7LfTn9zswHb93w0fucl2G6/++qfnod9rv8P0bOQvBPd/jCG3Ffq1QTOGo/oD1qQ1Dea+wHUGlWvmsBq47hzyoT0cyuX7jHghLM2OfPvIP3Nq1/94BdBPpBbcx12K1fMd78E21/90df/7H+BmXXjCx/9HuxOb/yrT8aQxzX9eADnvSdtw4btzo6dBVC1VsIVE9bis+MHPdj7zVr1tAerX1/9P459AWa/c/OffuzBjn/hn3x3FW6+884bb96EndGVZz94FhbcfP6KBZX2yfReC2ae4q3YcNpfDzUHtuLNaG5B5YSmnbShXv+0//k6bFnJb9z8PGSDje4nACekJXXgaVmXLvAY7/AAEDPFBBakbANaucKnfPUgurxSIkCBEwvxVaBChd8u9ktEuBMfDvHjUFlNge2y58QB+iz/KuXZiv1ttgHQOHGAOEXbvguwK+WRR3t+6u2nm0e+lHCO7h31Udwt4dy5vVMuOho0kQBpSeWYyGkZpz2WXWAq69IGGeStbAJoeXceg2wvpmkPxDQbzgwQUabtj2DX+iR9pwnbyVu9P3gbrnT+ZPK7F+Fi+Ptv/6u34Zb1nfXXgb3oppu5hSletSFLMjcHhFFQouJKQ0aQh0XaimoqkTAhG2RGZgNGGSxCUQUpSwpNQUEJoKzjC8glNexABIoLi+bcWERQJr0Vpm4DsrA4rmJXEAHsWbfcazZsBO96n0SQRTte4sHc2NZvmZDr+8F2CNSz4awBsr/ozBqgjGV70YU9/Ur8rgWXjKD9O4/AbvN9988FLJhHAKojAoCFPSfzQIaFBqsYwlYDmFuzII9ACRQbQBpFlHtGcZ8VKkHVg7k/txcmiKgILlJ8xVZNmCdzD6BqFW9F7uRGDuRLTdmpUI1gbs6Ye6BSWEzQi6BEEdRMJYJT0QPRkxHUtDM85MJq/4x1XwDS2O5fdeHa6Dtj/3m4kXz34vglWJi70W4EM2PfAFjRa0HNhLmXBcKGE8b93qMGHPPq8jGg6t0zeNQDJa6Mah1gjEkAmMqkYoEYqHqtD3KoUjNBaVRjzQUxqsQrgDTERO2CcEikA0oLL0+AYT7IYsiSG9aHDiT6n/d//xvw8WDy7H9YBz3UA4B7gtPmPcCl5ifBNeCydT3ac2HVqEdPeHCm+ehbTROORedGjzRBmvlYtkE60imrs8VludcGBsikCN5jIl1pACaOHAPDnKwHsr0YzFIQUdabaUC0GO93QLQW4zSCffeT0V8b8In3Te9//hpsdr7bf+NVuND5397+796ED5z/68XXDVAHMzOliLEASL09c9+GVV9jJYKZue8CSC838wBqei0ASIPUywKo+BW34lEEiwFzZ8Z+BCtODdWAeVAw3slB7mGDqpe8AKTB3IQKKlWjcA0BZG6GMCELt4wdA26aP4x+FEBmbHk3gIzdNzY8yMJdNgIQ1qK/HwFa3pl3QQzydNaApPtu61smXBn/ife7r0JmXn/+YnAYLLsI58HCBDUSrvCgap/ipAk17n3ZAE4ZD1/4eQMqwxOj0zEQ5m7eBDEVdcUAxRJNEcJ262L6tg3x+Fujr78Bc+fGi1EAile4OHJdepkBNUeLNBtWzbpxLoAa5155zIbjnfPu4y+Daq40NAtEKqNFBzJ7z7gN7I7es/80gOuj73i//yZshVfMj0zAK50oeh4ALAYLI4/geHiOR0047tSNTxlQ652NnngYhFOzV2MgoCUngC6WWRHaQZ57ncKVUwc44NkoqZnFXf2HVM1iua8f2WpH9pc++OJ7KPcPtXydHze4H6WuvVt7T8vzHu07GhT3M2w/C2a3Q5PI0cCGFP0gqhEOTSuH4w4nmCP7hxO8BPS4yOOWBTNQLJrSAqYFdzWaHGYe0Jaa9EFOhbPoAGnemk9AtJSGqoEYkipNEO7CIYDc2Gpcc+BW+ifB7yTwbrJhRq+Bajy29rcNEPrD3lMeSPMU51yQbgFYWbSIAJSmEik2ZMHCkwHQLHiMBCJSXVhQHFfTqx5APigEgMwpOJkVB1Rgbu4bCxNktHCrwNzaiG4Al5uXox8Au0b89ocuXI/fe/svvwCX2ze/dCGBhb3rbr4KDPNo3gClh5Z3ATtvzH2QSGPRA0b0lQaQKK0shuPaA92fc0HV77M+/TDs2rde35NQNWpuBZj5W8GmAam/6emATPZJA9hz943UhJPuin0GyPxdd8eA3UES6TYQzux5AGlz07htwizZik6YIJ3UTSPYsTZMYUPVWTNPeTC3ts0tF/bCJDodgWLNg1kA29Z2sB3AglPBeUAae2wBV4PvmRdN2OBbz//um3Bz+K77bRcqcWWgRiC8vJu3oNI+GZxtwj31J8Nf2oDM4YKwYcu4Hu2asBJVbTWAnegT9z0bfpj+0Yt/ZMPNfhiN34TcXDhpC1SHqRwCfUVX+4Cu6tUWqJOV+PgYFpN8IHQQbi1asUBtYpHC3E4bOz0QGuPcBuFk/rwNubkI9g1gIqNsDHrnfvtJC0TndPrIt+Ej/921xIZzzXOmHoHgRHQsgsv6u8ZfAu/qf/jG8F9ANrwx/qADSg9H6oBHsRQ1SA6IX+ogE8akwJSwjL4vqrPVZSAdkBGNvNDQvaKKWB5LA+RQ9hcG4DNSBsBEmpUJUKenJKBGaqviQjq5Xv/Qgq3oDxtDAWf0K9YUuBLuP/efA3tuHq1GcD44xxqw0yzUHKWpuJUI1KQgmNmNdtn3QHNWzGMRLNzivZkbc0rAjzBhz9gr3hsdTwlAWIXPe6+5ZWwHoET70VYEl/yL5uUIrg++/7W/8ODWaPP5yxdhe/LRp98xYRGlYssCtS+N7HnIvSyed0B40sgDkOSTeQJowlBsELrSV0I41riv9ZQBK+31l89/GfabtwOAmbnJpgmLpiB34Zrxkfm9CK6mb3xp8AYQ7zx7bQS08/ECEHU8OQHp50nWBNpCIwA1rLVXUzjZbpjmW3DKfuK5XzaAUAQEkPvSlh4oER4BXA9D+1vANf1//9J/vw7qMOXW8yBZRPvPgrBlN4tAdudaHoASV7qrEax3Hxt/TkLF0YKTLuz728ZtG2aDbfMEkPrX7UsmbLa//+w3bdiK//If/94jMG/s9BIDFEOY+ah85iaAJoOSydAvTezaXcBbtKM1FtIj26MoUq77B9TM5ecyKfpLAq5DD/ydeEN5FAf/044cf3c7VCDvZohLDvaSO/p/qk085T7lPuVK+VP91qT8d/kDLid2aUq5U1JaFsHQDo4rJnwpeR0U2zjoN4r+UmIrGI3qomCASsqo3Ca2GABpGX+ZirbwQLgiFQ5IF0NMQHgiVCPAVc1KDHIgdNUFtV4LVjsg9UpwLAE1OmaeGoA2OZ7oNqSObCoB6IO68/BzoESr+poLe95Clybcm5x75rwHG86G2LChGtaCWgCrnnZhxYUb9WsXr5qwph0PVzzYiW824wD26hvJ1ZegFktvNoBdtpxkACT75nYIcrSvbVuQTbLBXIOKpfjKFPLGQp9pwDAfzsfAUKa5A9LIG5kJwqGNDkSiJ+ogx8JSE6iOjsfrI8itWnzSg4q7Eqx6oBrVgTaA/encnrugOavJMQcW40WyAPI4j/IEVpwVZ8WBPXPP2rOg1q6ZtSYIXSB02G/sN/ebsDpdDVdDmKX7ySwBJoQyhFqr1qwZsNcoioSsDGqDmgfSlpY0YNaeJbMAVm3NW9FhX98LdhLIxqm2ZYEYzsbbAWTarJtOQbSkk4+AAFtqgFFprASg9dassxrMuzJSEhCdilMzoZpWgkoAaXvbTCKQSTrcskD0M3OmQ84i2B+B6Io+PkhdjumC2j9ePwM80PlPrM5rIJ3z3/yMCSQr0fEI7gvOR3UPPnHfi74XQKz/8fq/FyDd69F7OuRmVp+HIG2pyxCq9eP6ugWY2vTUALJ2EVRWDWuOlkBFV1EMyEijbRfm2nb/JiCNbDLrgLQLTRo/TxZtYCLDkhimAPiIoCTm0ABEkxYmyKRcUKfE6CBaoijL2sBmAHJETBOELQKlDnSYiBZIE/BBoBqVJoiu0q7UIW8zUlOoDFec1TZg1VrHHZBG1TpuwnHWOG3BPBZJLYRq5xT3vAZ6dC55wICN1raz58JaVzdPe6BY6gXVgI3Oxtu3bDgz0b+8FsGmefORax7s27fNawJqZq7vBbCl3YyuBaCGMlkkkA329M0Q5vaungygMlVSxYd8mJMZwDD3FhMQdalnBuTdLFx0QPTpF/nRsmDEGwhL1EHx1aA2BuGujtYiUCaadcqEal8zVwewH+5H8wSqVsVSfFhoO6PEhkWyq92egGISZh3IzUUy80GY0sxbgCU0xQc5VIyKB7XhqenZIZyIP2f8g5fhjPe5tV+P4OHkCfMs8MHgQxIT7gl0W7fhOt9x/8CGD7v/4eLwRajaWbCnQx7OzJ0ASPPWogd4IhJ1kIig2oGVid46OwFpV4xVC/JOEW2/0tRY9SA1dpytJshJ6m0OgNZ8sNeGXFt096cgyMcLF2Q3T7IhEMmWLJ6fqRxQEN8OOMp8WHDqT5kyAYwSwKOymptGepB/nlJYYEMO46wO0ymXxXaWyt4ymPPOIjLL4w+x5c405yU4L79PPxAolp8ctjstzj9VQP/ZBLvdqZkf3n7Rr5e9yYH542g7mt131Dxy1OReTrEsfrhY1DlqctcK359olNGTfnG24gGTniwWqik6HZB94eQdEJa0sgjoCF+JQfakkSUgW/v6bgPm1m77Zgey0ca0qkHezicygRv9y+Y7b4DoibpyG7JhNs4vwrZbiSuvQt7OwzwBbECAMlD+uSogczNtHsBuoLSUV0FOSuBtZ142gcVU0YQBWZC5ixaIMYnUQLRBaiDGmbsYQe4ylQ2gK+3MARnmodRBdBjLOjCUzXwAcgJlechY+sBYNujBor7T2DBARrv9203I+gpqC5SpGlTbkE/lVGqwN1K6qkWRjlKH3MiN3IC8p8ZqDNk47+U9SHWGeKCMlbHiQxYWUcG7XcVT+iC7tOmC7OZ2PoFsqo5UD7JuNs2msJcKX4xAuEpdmJAbiyQzYLepNEQLpC37eR+km7mLKShTUTBH+Vk6H4GsS1+OQfiM6YIMM39Rh9S8oX9kAokSqEDeRBNA5iiRkoDU8n5ugoxlmMUgPEI5ATwZZ03AxVNtUOzKtNYG6ica97ogrWMvn34ZzkdPBD8PXG7e8m4bIAZ6dCqAh8LPun8LuN74jvj9EPajayY6KLESq0OQRtabRzD3d+JbDihOGm8mgCU8VYN9TdrShbQlU+mD0EhlD0Qsx7kLJLKROUAvDzKtfI4AItmTBgVz3hgwCopcYRwB8CYwIaYOmGIghoDJUKQgBwRlml2LNtAkoQHSwZATIMagB4S5nSUgp3k9m4KIxVTtQT7adzMH8ul+facLwlBaah923E33ch8Wfu7kbVBD1am8AduD7+vCg6yZt3ITdvWKWb0ImZGPs5eAjuzJL8BuS52oDiyaizfmXwN1LEIRwZ4n2tiQmwtv7kM+UeqKBTLOzaxXuJRyC+Q4T+QQMPN2ZgJd2ctHINu4BWOfdPI2BxzwjBlKF6jLHkOQ7bw3n0DOTngzgNzfS27d+gFXAAAgAElEQVQbsHAUTR2A7EpdOiDTIg1QBvkgm4AIi/rw0qGXT4BYalkdMIp5JaSNBpiMRQMq1qp50oZFK9V3XgbFy16eeZBbOUW6ZE5uQtWs2dhAIKKKDcKVInsV0GQ/m4KM8mk+BNGUTq4DI2mjATbTfAKz5kZwxQIZCU8xKNI9Lch9xVQnkAeZsZiA6IuSOll28i4Q5q1FAIS0CqpiJoUGXqQDizqasEEOGUqbopyxBiRyUmrYYzmkAHKAmFEpaCYl8VJMAKTCOKhdEVNEu4dACktNvSxjfadF91Bx1EvsOVQdl5/DnYHYBc4s8epwRHGFycGIu7X9nwKg/2yBfCkZLdsSwosJvzMd7W76gKMTmZSfF6B+SHBRHllGORaAvjTZJ6XpXRdllG7ZH5GU1aqK75/Kop70WHaLqj3Cy8cgm7KV20AkTNEHWtiKBjTy4XxAQfU6BYbZQBkCoagLF0RDDmQCWLmhpCCQDdog+/RlH3CFqRgg6vkoS0G6YiICIGEsNaCXD/IIpC0iLBDtvJ8XD6otRyBdYtkBtNzPG0CbGBdkjCETYCJDGYCcUCcEQjxawBRNNoG67JbUFWmeAKMi3Y6JHCgdIJJhNgJp5eaiSREd3AXpY4sEGAgHBwilJ32QnawjOiBs6coRMGbMGGSj5JL35Eh6ICf0RReYipQmYElHeuV4C4QrfTkFOWFc1MsWhUVlnCNdkJ4YLzm4pQ2YeZqPQCY0pQ3US2/oRDqyAYyFjQ54Rca0bOdhPgQxkHYWgfALQVLW856YAN2iqhwTmcgOSEdMRQyiR19EIPsiVjxQO1VPG0EezEkTuKVd+ML3bXi48fm1X/dAj9bNNeCqfdXbiOCh5H5z3YB7rUfffnoDPulcir8fAMk83G6DYilN1QHp5Y2sB7mX1bMeiIbiyyYohtDFGHALzj7ZyFuZDXIgW3kdiPMki4Ae7SIdUfpyCbwhBVe5C2iiWTC4lRSyY0zhgnAEogcMhKlEIH362IBHigmiIQyl0KgKSmJX9mQThCEKIo86Ol2QwyIdTTRFkxCknrtZA0jlWPogRkV6WT7OwrkOIpZ9qQHkDaUNsiFjeqB4heVITvJ03waS3M1jELYIhQlymo2wQYyzMG8DbcUSKchEdiVAICf5BBjkrjIFhrKbT4B2ydnuiLawQHpFmVthiEixgQmptIGG0hMp4AoEQD8P82bp6/cBn0ikFOVGx0BLtnMDGGftvAmMpCYDwBQjpkCS17MOUJdj2QFcGrIOONKSLaCpdBQP8MVIGYEI1X7FgKwsrzobX3F+9DwILTW2vgiLZmZjgwyKvPuqX5QVxde8kzao7VVvLQAa29peA5hgFcWLSqCdyo60AINUdoGJ7C4mgCnbShOEJf1SEHQyA+gVPA9oBYUvAwI5oqgy2ANsEnwgVMZKH4SDwwCwRRMdmOaJHIEIhU8PpFsWUaoXpnfhYMoEpCWbMgZaxBhASiAbFAKpDjSI5BCYigZ9gAPFbQnoy6JLd2rSR6lblxp5oQAW7agleDkC7gTpJbQfnok7vun/t0B+Z1sCdnIHVKcHvpFDxp+jEtVy+o5O1lFJ6JBTd+lLT0pAP9DiC2Avew+EAmEcjNeBmLgImiMqzidbdEF60i64kIUvCs3Fy7og6/lYTAAIqYPs0SAGQjEUE6AlXTyQoQjEkKJcZAp4RLKUHoUJWPTkBKSJTguESZ0p0JNIHWSdLgHICW55fSFDECY6PSCQU2lTcFcXAorJCEgZSAeI0Esq27gEwKVbIy6JTBL6IP08kFMgEaZMgUhqTAGLifAAn46cgrQZCQNEhwEp4OJKD6SOJWxgQoIHMiDFB3pYRb518aJLq8j3FxYjtHK8X47vANNy3JhUDkHWsUUPqOPICGS3YFYTVqm5DGVHdkAOynCohLDk4u4yAhlKEw9IqMsuEMgGOjAQwxxgXDyXsoVZEJSgiS6UhR7AxVM8EFqlU/VBWmJUTSEfil51ANWwlmgOLBzFrLwFSby1tulC3XgkOh3AB/77tojgqn7V3QrghHWeT7lQHZ26eO9tmEW3orQBqqMmYghKW6XaBmnlndyCvC/D3AVZl1NGICwQAWCLRAlATEvz9kh4YgxMivkgLoCKuCgDKiMauEBATzjAVCTKFISmNFQHREvx1RByZFd4IMfouKD2VSptoCcmAsjqWSMrgK8uNBBtpaFokPezVqYDZvH7KW21p0SQp1k764JoiEACuCIuinUUliThMpKAHGVJ5oDUZS/vgNDp0QYZZIWu1pRN2QRSURDITLHwAIc6Kci2LDjJG9ImBtESaVEtTwzEAGSHlqiD6CpNNaGgMk2ADp3cAeGqYzUC6UpdDoCedGQbBIqm1CG3Mz2bgLBFKgIQ3YKWSrZzMx+DmIqmqIOcykbWAGHLiQRkLE05BpnIVAYgrKJIE1PpyxaFxmkAJrFiAz0xVkyQMb4YQOYs/HkMuAqVAVS9mlEzYObPTADVUEzVANVSbSLIXOFWDKiEJ549/Txk3Z3W1T4wkn1cQKclp0BMIAsBTBNNIJKmHAAR9bwL1EVfjEAOy6oGrugpIxCeOlJtkJF0SlenRw/EWGkrQD7MxnkDxEgxhQmYtNBAtvNuroFiKbHigozzZj4FYRJKB4TJkDHIae5mUxBTmtIDfNnMPZB2bmYuiBZDOS7W5ZJzvlkoNDJiXKxnZZVEvfShJwdr3lGgPeQzOdp3p8G8wJqlGrqM7eIuHPspwPdh+9n4yJftTh17Ccn6HaC8bIcTdTfX2537h77zO6fyoOoYlA9afRnlWGrqy/HLsoh3+uTrolGU4SyvTMcoi3UYZXGPIniviSnaFGaeUmDAKPqxgIApU6BRagDL6w3LIKN2QXnIhMnyASQGmuX1BiUVYqMsH7EM7otKU69R9selj+kwur+YjYiIKYWmVNz3IeVtQlHN2eCoKapgKNMxynKcheDToCVaHBI1LH1NTZplUZDiPktikWXw1EEwVYMGjSPj4jJ6ukmzNCWG5fjiuuvl+EnpK2uU17N8paZMZTGvhqgDMZEMofhfeb96ef/FvlEG09TL+yruo0GrLEaxLG4SAwhLDEUE6EJXdJAjpVEdgTqqdrUu1JyH6p/twonGL778j16AR6Kf4+dtWDQrnmbCDTeJkgAeDR8Lzrogy+j6D4IfBB+ZcEP7w+f/7RuQB1ejH+mwCGbOrgeLcL+154PSVVw8qEzVQaUJgCsNyMK5O7MhHyz0+RCkl4eLBJQOad4HBtLPpoCW+1kHoKiehUYHH2gKQ9FAxOqg2gKlrXaqPZCu4leAzGCsWCD8SrziQ62tDY67IMaqX2nCLJibCwsUTzUqLtSMWlj1YF7fJzVh4c6ZRVCjYqpJEbw5c2A+Sa1dHSqxMhAGEBXc9fk4c+dNUCzhyzrIetaa2yAb+SSzQQRyKmNgQDOfgJzKAB+EK4bCB+kSYoBoMxFtwFNc1QE5pSNCUKaVpFYHdEWrNiDvi5YSQrWvuSeakDtMRQhyKHpqAittzV/1Yb81C2dNUD3VVpugDITNAPZ7aboXQjVVC8Cy5619BxaDWZr6UHGUwiXgLLrzJogIP7dAaLKd9yFvZObMBhHKZu4DIxnlBsigcGmIiXCUBghd7z04AmP891556QXQ9UfNZzyInVvBrQAeCR83HzVgJ5oZuQt71h57NpwP7g2OGxD6/+uz/xZIOn8++voboEwWnb0R5Pq8vmuAGMtW7gOB7Ms2gCgsD74SqGOQ4CtdULzKtKYDKFQakGtiUnGh2tbaxxPIhjLEA+GqvSpQ7dT8FR/2nZkxH0CNWlQNIU+yZubDojWPZglUWxVXacK8n4apC3TyeBGBQIaLADJ/0ZnFoHpigAmymQdZG6SVuXMfRCyTLAVJPsgaQEOauU2huBhALMcMODTBp8QyKrYsFby0XM+Wql2x/iUHFt+jgH7goy8VzqXn/Md196MiwP9n7W9G9bO7TRPF3mERh6VmvgSco20J2snByMPpuxvolz9IsS18f3VYauri6PUcjZoHSA8qSJeWAKGXdbamJZdwcd6ISHaO3N/S0D89IMQsvjdGJ+IQ6AoogRCjJBBJyvGFy2B6IIhEdCg06jvnMCrrNesHLoaYow/gUkCKS+KcQyqEo0B8aFpaztPy/uoHdaCL+5wWUHTX+CmT0vS1PK5oxoHgEJem/GW6yHJ8cV1TgjtcLNHBDC4FrxizPG9hQdDKo2N6xbyU9c0pNe64vK8lcC/PG5bXZZTnKoA8IpYuhaBlFmcWBsiQKTqIWIyULoBqVxOoROvWAz0423ly9IvPQabr9llgOySoufBQ8/6oBuxHMjgVwSfRpWDTgEfMR4JTETzoPGI/FMDu6En5tz0QrYfE0w/Durd24dQXIW9k7uI5SKJE21iDmbM/nj0MK2ZtWLsAx6ZaVJNQSWnn34b9aRLHwM3m96M334TZ+Hb7avF8x8IEGoUFRfSVkToBRuqoOgQxqNRXJiDHK6NTISi+bj3ownrrkcZnnoFz9mNPfuYVwKw8o63B9SB5fVNCNVqRq2twn3v/hQdegB1nZ2N7A64ZV7i0Bme6697aK1CBZ3ITLvcueh+8Bceiii1tqPhzc/ebENvv8dYjkCUbfGyDGO2nW01Y2NLarYMY0Bc9wMnTRQNkJ58CCKsUxOrUaQNTfNEBEaletQESpVjkdCWodqCmrzXPpoB9clpvwjHrQfOpZ6DuPvbyZ0y4Nrntbr8FenzPC2cNOM5J1l6Ay/EV+6oJ943ue+u8Czv9rRduvwyb7i37pgHn3HvM08DVySdfi14GEc+tXQNqLamnG3C1894gfBHQN5PLNiyC7cGtABgUFjSRymZmgIyzdB6XLjiAkeiKFuT+jvn/kPfuMZIc+X3nJ7KqurPf2dPzqHlnkxxuk/tgUVrZtdqFmGutrdKdzizeyVbpoDsmcTLcBhZgERDstqEDk4AO1waMYxE43LUOAph7EOTyeW0WvdSpdm2JyV3ZW1quNEUud1l8TjTnVTPTj+x3VldVxv2RVV2PGa6kO1En3f2AmeqMjIiMiIyM7+/3i1/8fus27FTeefQ7b0PLOZT7NmjylPOgA7oVeZpcr+7YgQWjKd0bNSE0Is+U7WQ4r1zQqrFa/DXAbS2rPLCEQRVIsyIA5Yqa8EEsa9nYAohSbClRBpXUVhI+jFiGndQhtjRrXLAgUT299OAjcNa49Pznnofbvj+6MwMz3tyTJy0YK054Uy7U5W3rzotwzjpnnnsMfHvjpXWgkTuQe8DxFcOeknDd/8i88jhM6qOPxG0IC8HqzgysZ6+5H27CSD1w1yuwU722/E4e2iv7FT8FQlc0q6AWWl6jDGRDiwIglR1Gmgazc2DXP/L9Hq0zPQiO1gk5BLg9ga4L5P2Q3e/5ze/kN45qi657f31i9FdBtd4D3C5QdgdmUKVxN3UHl758/dHR+vNxNMx639LfryLhSMke3TeE0Vf6Ln5Lyc5LTQ5wbIEwjjg8HQhUNz3ZAbhgqN1d4K13rC7rQ6qeHuc3CNAyamV3oik/8tksuh6SOhymioAwKTqQp+qd9g66RuyyHAHG0R5Rl0MNgG789G5/uuokQ3Ta1XlOj8HpTvqgI3H3NABdRqrb/u7Er3da0WWggqF6jf7x66QjIoBH9Thn+tID1Xm+0I/iwXfHsduP7ntIAn5H51DvnnYgUrlXOrPD6+y1L7ZlKwlB2i/eAtpOw90z4XThwtOmCXVvU246sFndNHUHzrrnHd0GWboiWxI+4iN3z4ELxnkmHHi4/BUvY8NV/+oV3wPNGXFGXDjrJRm3wTRjTwOsF9cd5cGWs2VtuZFxk3IhXk08MmLBaKH1fODAvr/9Nf8pOExtL/0HCSxoQcQACU9ICBcwNRfaZrskqiCCeHFEwpR5ofQIML/ys4//t5twQr/k3W/BPoceEureLct3wMifsBM2nMufY8KEhtWwsOFW4aqzDpxZecS+z4HTxmlXc+Fq9qo8NOGYc1w+6MB9hfnNSQl3sreslgmhfMD9mVfhVH7qyVEPrroV8Y0rcLvwuveKB5relLt5CGvN2sEyoKu0ygC2iLauFkkLA4SnrcQlUImvjKQg9MKSMEGTI9a4DRPWRfnIZRD6/U9+0YSLMiW/9BKMFabtOLBTXrU3TDibv887JiHy1A6Tpbgza8MJ9wFzxoYD8yPnwIITxlnvIRNO2kkZ92C7MO1cAM5kT180AFVovwoQZu93PnwMkoWZZ8cfh4+y37W/IWHN/uPMKz6IapDeWoTQU0WVB7GiUm0DqFMQJWAhLLQMWM++VfyDArRXflT7j1kY8U6JS1+GU/60949NaLoJOWPDtDNtxi1oWxF8xexpeVKCVtLyMaC9qAIWgRTJSLMmkiIAqsLVykAmFiSKoIoiFQtALWv6iA1TFdNMPQZ6/nPP//xLMJE9c/F+C05Vz3tTwG72A29TwgnzjDUroV2IPEGOewnLkHAse787C+zlR+xZGyZKI4wAc94JGQN8f+z5MzZcsC/asy4cVA8cgFj+9rNrEs4ZJ+xjCj5Mvfm/fu9x2Cv+6IXXnod9+93MaxLaS7vJjTJouUjgUU5Y7kjeJWUBBlWWgUBVj1Tt0ZfdXQ8GVev60L9hCu7ClXtrk/vTPwFA/6sB5F26F6D3OJ5elLMIZPyhAe/xRV0JtAtEdO5EZAwARXcp7zENR9F0Igczfa+lIwMLfah0P5D7HYDvB+huehc0+gFSPwK4LhANRvXppvtH7Q4Gn3eUr8MIKDk0Hr30LmB3ASygX/NxdGzjaBzoz6+6SvXutO+Qqnc0BYPP6bbf79uMGFRh9dKNzlO6zEE3Ve/U231+P3UlbVSt87xu6zunGZTsSPCddNVTsZv0ZpMvonmShKH6ZWcLIN2pJ9oz11VJ2TCanSoes2DEveh93oUDY7R0woYJY8ZK2HDSGjFPAjdl3VozYaSgO8clXMya1qQDsnrF3nFAlqS3Y8N567w75cJ9qfswXLieumbvu/Chc8VbB45lZ+UxC475x2zhwVx+zjZs2LN3HWzYTvnegQe7tm/u2HDg7pa2gLCo0kgQOSwNQIp8fAXGcmfcBRdm5YPpn3oWpopnH7v0KpysPHLRMoHSmCck3OS2c2BGjq52bThmH7OP2XCidNyKmbBj+SbAdfOad82DKWvKnJJwwp61NQdumtfNQwl73i47Fsxb89acC0HqAICNqm9tAmezl5z7gInChMSC23bj2awJJ/JaNmHDtnk5/0oeGu52qbUMIotNAGRVOUyByrEiyqCl49nRDIx4J4L7DNCC09mHH4ez5U9dTF0GvTz/7E/YsL3YkjELDPeEHbfhdum22TJBl7o3IiGRjVsAvr/ubZgwbo26Iy40zF0bYC+1xSZwvnTRO+PBnr/rAKhU5Hp2rDTm4sAd747TtGGSEyRNOOZdsMY92LBaT/6XDkDi0bErsF35fvrfpqCd3XJuZyIjWFED5YcL4TIIlzQF0HQtqUmIOcnlSx4cLz1sfHEThKN7Ex60Sw275cCYOeYA7BibZuiCqjdfCwDhi7rwgEUgAyIlAm0FKIssRSDFcqwOenVu4XwK9Pz91t98DIQ3Ieds+JTzd37uvwbq1W07sGHMm3QnPGiVWhITlKm8EEjkI5euO75vHUiIFUKz5UDLObBxIfB3TN+Fiexx+4QHjUJ07h+isK/d8LxBNjAPLdC9CcY90P1jngaMGOd4yIPjmYuXF1y4YYtky4Xb9cuy/BCIsghIg3KUHgaArvKqDhisqBzRetrRfHYENpSkp7ns4UJw9Ntd16LriHog3V01ey5i+zW6vRr/fwPk91a132vHYVDqHuaDevm7L8AfyteDqt5VL15tzxgiSj+yhj+ClC7QdCXgoeeLrgTZrdcfvH8E6F2V9qAmoRflp5/h6LVzMPxkX5hX1el5l+FQPdDujUwvv97X88HnG4P1dqfqUb2degb6Cb2R7y/fbwLS397eB9IblS7QD+frMj6D7e19NvpAeQYk8B4D0+t1JLF3GBBhHrXaJGIUJD1At0RkHJgnqdKgFpQR5iHhatHxJv+m9c5j8A7fWi158Cm+YmYtaFqGnLXgqvyIDRMuWhe9YxJMx3SmHJDW+45vwpte2f2WhCk0Wg5oLjYSGvmted+BD7x9d88CaWovaB6M2+PmGDCSihnChLa/9+iWDYelHbEOqOUNU65CLK2hZYCC5scyMFm5kP+sAfPBLzz79BWYcR98/kETAqNpA9w2fWvfggP3lr1nge6OeeM2JM1ZJk3Yz37gfs+FN5ZfERUPtgt3qjffAM3nibAKQXkiP/4o1LPhU2oL9o1Dwi/DCevSE48+CUFh+vmMCXdKB1bowHRpxpv2YCY1YwFcNT8y913Q85NMAuf9v/PIrzjww+R64eoLENhvL3y7CrFibEmrQug2Fw8DwBWLmg2TlXP1h+ugp3/i8V+8CEb24ZkvSjC9+60xB6T5obXrwbQ5YY1IEJGJIH7qtnfDAdxb9rsSfpj69mvvWrCevvGMfArGi7o78hpcS6l59RwcuIEXPAPN0txTJz1oF6ZeSJowXfjU0z/tQsyLe3MO7Dn79p4Ls/lZywAOvUMboA22suC+/JfNX5LwvrOZuvo0BJk3k3+wAmIpzDdyoEqqcAhgR457RDnujRow7l+qfulVuN/+zx/5+49DK3/oAQj3jr0pYSQ/AsC+sWvuOEDu8OU9G8gIRB5UNfK9LzIisrLPU8UBLTPGTBIuZr5y+b+7Air7wMzPvAhxc+RywoNR45itSWjJDafhwJg3zqQJu9k1uSNhc+H1F16REBh/mF0zYbe++bW1WSAXVtur4Nf10uhzsCt339jNwrYxMT/1DOAlntKfB5ZmUmdNaHjH5C/JyHgvlDCWHbNHbWjZLRsXwmrbbDowXTpjH/dgx/mU/UUJa/l3ll8XgBfY6ymg1rZaJSApvMgIrnOKAAy1QLTuDgpQg9HQeuk96q6l/eunz+BqOpi7V98nRH+1gLxLw6qIwaEYlNC7x9CGJe97BVnpB4Bezl593ZczyEj04H5Q0oyot8c9uH9C57gDR6UH+9dzMBAMTZKenDosQff3a1iC7wdiGf12nj94nKJfATQI3N129sbPv8d9HUNJekYhOr6q9dXca/+gXB8M9KxPIqanGRgEbgbK9zQY9wZ+7pFOX/owZ508CtTZGeWOgi0pzKO9ewOQVJQHmJ1elkVZuHC4uF27k4TNxR/IbxVAVBNJPQcHwXXn7VUYt2efPenCA75l/rQLOHgzNsi8ZN2Es/lz9pyEc9XTGBJu5l554XUHbi6+s/JHWzCyGH9BPAPxsqiEgEqGtXYW2mbLaT4BvtkutEugFsNsOwcir8rtF0CUVb3tAgUC9RDgRsY+WiYmRwxQ1Sl5WsF6uenEJWyWVq0ND2J+zASY9KeYdOBUNumcMEGTTXDgPeN3t/53D65XvvuFb7wMoQyq249CvChkKEBbEAVVgA2/tdJKQ9tRuipCvBSvj+RhLbhjv5OCTe9D581VmHQfNn9Ggln9WesrJmy4mxJgz9439x2YZ949LqHltjwAkTkjPvsIJIof2T8AwsJeeT0NKiccLYD4wogz5kNieW75wmMgqjNPnn4VTmRPmmMO7GV3AGgYh24AnHXPeZPAZv6O2fBgzfjey6+Y0F75cPa7z0HT3c1uzIMqNStBFtpLWuQKebFltBZA5DRdS8F6/kYuUYLWCpn4oxCW17dWHfgo23B/3oZDa8o9a8GMNW8aNmwZkQYjYY04cQum3VNeAtD9Bx7/ggsieCf1ugnKCZaaNVCeqGg6aMvCwAfliKSWB1Xcc9c90DicwYLd0r7XtkAvjbq6hIgNhMBr2IEFCRKzCQ/UYttpz4Oq4VAFbVEraBLCbGiEaUhkJjKzNsTyE88aL8Ge2XACE6bsaXNUwmHp0AHA1BxhQVxGXr6vZ7/9zNc92Cp+v/iNN+CgKOzWFjRzgb5XBc0RjqpCkFQFVYW2F1ZDB9rp+ErcgbatauLLEKuN2TMWSBm+sSeh5Z61HvVg1v+8+QUTDo2IERIl4eDACKMmgObNyrMWaLnJ5TkBqrKfvmNwdGyPksiIGlBX2WjNEcnImFjJziZlTyDrrkd1hsWcHvUEkp4kHtHHy+GfIJT/5QZN+fNS1619a+C3d6UP5NOPHN63iJznd397pThygR+n1XF233XSz1HO4KgOBu61Ok8ZzNf9DY5+d/vuB53r+FE6R/miV7yL31dPwC5rffW0Ou3spnfzB+wePb+bzyfSgfYrhbrpraMwAN3+dstF+bvjttsn4wad/u725e/1e7dTvtfObvt3+8Y3qrOnuo8f5e9tEQyOV3c8/E5/7x7n7ji2Bsr36m311dP7BLtBerr1QxR8YVIs0/+hOujApFjhOLDbee4uvlgCYYkSSaDAr4uvAgFv8esgfiNWihVB/FrzMwe/Chu/9cF//+YLsO1e/+e3CnAmf6ny2SzEU5PVmQLcKtfdNRcoU01k4cxbl5Y/l4Vxa+4zZzKw81tX33n7H8Hhb21//1YaoB1v2CAmQ6O1BFqGQuvzoDn8RssGsah+oT0JQqo/bAPi11V0jOe3OEcBMCixBodf2Y7fOQ3t39j+V7dfhpNfvyDvD8Dk08b5PExWJp2YCQflAxfgpnujuiZhO7lT2Tdg9Ne1f4AO4Vc3slduAV7LOLAhTDdpvALKDr/ezEHsqwLlgJhkLUxB663GuQPgcGk9da0E4bXbv/v+H8FG5sPT7+Zh/dfq87csOG992v7JEkyWpxAGfFRZTfkWTBeT8iJw4V+k5JcX4eA/iBfGPw+H1tovfPTzwFfa9qEDe7+48aX6o9Aqbrx89SEwWqczl2zYWmibIxboqTFvrASGO+vGLbixeI1NEyasycCQMPbV+G9qPuwcv1Z4ex7Eb7f+8ABAtlPNNVBfDUutHGhV3g/fAiDDmWgAACAASURBVL4fLrSuAV9t/89NC5pvbbauz8Pa8jufff0paFy7efqDl0F4zTwOBNaoNevBlDudnbFBX9FNYcOGuZeKF+CcfOTrP7MEenGufSEP27nri+++AyLX/u1AQvtLzbXGGjTr6//io5+CncL1/+HDDOzZB8XDApyavFRYKIDmR9HJNkqbpf0SnCs8EHzGB/Gl6aUzPhzoWw+t/SaoL+2m7vwGKNRneAXULzS/H3wVtvKr3/zRP4f99OY/vVWH0794ic8BTSuWH0lBYzHIH5owZxsFHdis7FdiPoz+4sT1mQq0vNvZ974A7drBr25ZoH09/LVWEtRvh+83C8C58IHWMoivqMV2HNSvhLKVBnLttxpx2PuFG5n3xmDvV1b/wQ/+FbRSG41bSWg6WmrGAi09bsymYHZl1h5NwUZuK6sMOBa/z0m5MHPu7DcvfQm237/21XeeAfWl4PPbXwcCUiwCa7gqB0yy1ImPviZ+FYA4S33rX6uzzvZE3t3O+h901qD4AFbEj3K2+v6K6u1i0CcgPv/VlMiH6eNU7oOS2PB580EJsSeB3s0X9aR1GFaS9O9ZB315+xXT/RJ9/3PuJWkPysS9+vS7yt/dxn4ptVd2UG8Aw2V7ozXYr96dwXYNjtPdkvKgqml4HD4+ffDUwbBpSG8cor/9oZzD9QZDNfgMv4/BsdA7OXrv2j/iuIO+Xx+/c5rA7wRzSHb28CtqBVRV5SmCSIvl0CUKylGGMGjqDR1iK7HFhAGa3kzu2XDTeiP5mgsz1c+5f+tFeECmvYct0Esj8rgNN7I35IYNbe+WI03Yyn1//nefgNDftW8DWkmlWhaodCvXKoCSygyLgEmOIggfgxxQpk4ZSHU8aaWxBIAdGSuJQAtiBogllQ5TEBb3qhtAs9R+Uj0L183r9qENB9aBuedBSGgqFxKFptkwIabffOIHLuyVP7QrL0CYCUq7BQhLraCxACyoWpgCURI2JVClMNcKIExTjY5XCjtWg3guoetZaC7tuGtZuMWbC9/+GkwbZsZfhWn776pfNOFG4YbdsEBYmoMD5515a86Cm+YP7V1gJ3NFXP4aiHp7MXBAGfhaCUKj5TctiHFY2HVgr7Qv9y1oWAnr0Ib51Bk54cG2ty2j6bHj7VjQlu997bvARuUN95vPgcoHyztZ0NKq1HRALYSLbRvwlK0ApYcID1SaOnkQtpaO1YGScFQSVDEshD40k9edt0pww9G+xirMFKZfvWjDWeuCOSthz9yzARKMO5M2TPm6PW3CNfv35198ClSpsbJTB5HrWHEU1aJaAFFU+bYDm4vvW3/yHEwYM6sXLJhwJz2AndIWACOpEXfUBd0fZ8qErfIHs993oFVcM6+4IHQctQToqq48EIiMqMJhbTe1UYV4aq2wakO8GpuJOeCX9rymA2Ou7o2ZoArCxYMDbm+t2rCjv+X++6egndzzNvNApl1sVUFlWGqXgLQqhnUQqDolUCthrWUAVXSRB1JhsVUDrNBp1SFc9stBDjYrby2+ugpBOcakB8dWHja/ZMIudVez4cDaMOsujDr73LJhvf4n/O7L0E7tVu9kQVsUllYCtaRkq0a0hVZhULLurhv9eOLDwDrT74hseI3ukj5wt7eOBQP3/0LprweQd0kfuvIHrnvDpQ/k6oLW4PD+uNcQDF31MwwBd+/NdydDP+D1t7c/vR+UuuQP5Rtu4WC9et+z7k7vL3svoO/u1Q+3N2B4wg6qpIef1534w/0dhOfBv4avPq6/0A/8gxQMlBisZ7AdH6cS6+3dA/gdpbqBKUx6gO+r6DhcUqQ6DnKi9yQpqWVQ9chPmkhrpsqAqqtC6EHbbJYPMzDmzZC04Lz7pV/65cehUR1h2gNpXTEPLDjLGXfMgwvWGfsYUM38+9X/zYOt4tWvvf0MxDKh1cgArnLDNAiPSpgFihDWgUVVYAWUpKiKRGxJFghYwALqIq2VgEp0zFHlw5zKQWxhqp5cgDHns/LnnoV2acI+bsNoVrMw4VT2lDPrgp6K2QBXjVetlz3w9R/Nf/sFaMm90kYSWG5bzSqIJZUJJWCRD3NALSySBbVI11p4WVRA+JpPGhTtcjMD7QVVEQWYyJ1w7gNM54vP/t3nYd3epAnsOnv2rgmmZVpzFjSsSEOw6r7+1Lc8UOWd1O0tEGWR1UxoFVSylYKJIFmcd+FC8W9t/sojEFgT8oQFM+60N+XBSGFEAnyUveJtmtCofvjU9zzYWXyr+gevQdPZq2+mQaAWWx6oUphuF0AthLn2Iog0kWOipMpgAiudUyaZyCFTmGlZhyvAcszUkqAXjpfnqjCefCD/Uwp0Z/rVY8CoHJUAt+xb1r6EcWdM6i5sme873/Vgx72afPs1ED5F4QDLnah6ZfIqBTHixUQWdOtS8guPg5F56MoXHoORVNzDhF1vz9k3QXdGGXFgzfmh/I4D28X3ef010Mqh10wDUhVwgAIBC0CZFeGClpqqnXThZOVvzPwXF2G0MGvrL8IBH0nfgxOlkxgW7PsbbsOEzdQfi1deBi277/gSVDHUwyJgCRMTRFItYUHoK586iEUR+dWoRS6BSaulKCiPcoQJKtV2DyWIjDDiOrSX9lO+hO2FP+HflaDhvvfof5RwO514I2HDgb23tbMKwjiY3xDQCnYb6xUQKyoZloGApY6tkM0ykQI8DSA662nHaLZ/K25QwOKu34j8uzR/XRFoEAd6V58AoP/1AvJhGgb2e0nqPeAb3hvXh3LfCx4Gpd/B0h8HWT3AHm7nYDuGy99djqEc3V7eS1of7sHHTSPuev5wu3sSez+D0evDx/d3eKLfe0R7DEF/3QGD49xjjoJ7tmOYweivVx8o38sf1WN0yulDpwWi367jmm7+eseBzALpjgObqEYPjxIRA+CAyGpFzYGwqgoqB81KWBOLMFd4wH4UmDbu884B17nu7BAFtdiUcMwYt3QJOtpTbQv26vFS3ASVO1wOHFC1sBgaRL7EKyActajSwAJV8iAyBFEcvY6DHYMlsQSkRU2sgHC1fDwHLMSWYy7MynPu/T8HD6a++PjPmzBhn5BxCV2PUI1CQwLcTt2wfBOuZ2tbl1ehuRK4uxK0LGnlgnAi/4VqOdIM4KhFtQhKYpMEYWLiAFkWo2OFylRJCO2w3HZAVLSqWgI9mMhOpuGwNDozY8FO3re3XDhfOO8ddyHhJxyADzzJhgtxPWHHHUgURuzRZ6CRbPi7VcAXyzEHppaTtvkStAvGS+cfAeEmGDXhpHPKiXuwUd0A4LB0YO26kLAaj2650Co3/IPngECllQdCYlIHtawMVQNcyqpCdOohDVRYpgxiAYscsEJBOaAWlK+SIFKirGqAQ4oaUBl/cu5FmK0eN+ckNEtNB+DAOrAPPDjnnHXnXKi7h2YDCGk/034Z4rVYEK9CmG5Z7SyQE2mRA+paPV4BkZpdOfs0zGbOvDrvQMtpm7jQsAMZuGDkj9vHLLhZ8B9dsyBMt55pPgexQEtrQBgAFRDL2qJWBIoijQ+sxK1RwMiev/jgZWgVIhOxttl2WhaMZ8ctgHV/nX2AlECTIJbi+ZE8qKqWjhsgZKw0kgc8lkMXqLWttg8CLQrOklaWKgKmWlF1ECuaq+UhLIUltQJimRRpCPOtZEOHdqZRqRchsPcKawYoXxnKBSXDaisHsQWRIQUUQ6tdA7LKDwFclQk9IOi4ojWI3Ev7qruSdI/9Rsa8wZFRc29Fiu4Pio/9Gs7o6m7B5ON3zf/C6P9LQN5LHQTsuyXve0ns3ZyDNouDMHtvYAru+WI+TtIcprth9U8vc3cdd4Ngj/yjfulDpfoBdfiZHwf8w5qFfqAM7ip7737c677+MekfV8cgUxCl9DNK/Z/fIDPWNTIcLBfgdzh2Q0QS+OC5967DGjNy6UmdJBVQi6qgyiACasKB0dxEcUaCXp23f/IxuFM4uMgVGOtYK89799lTHqxZaxLglvWRXLVhK7vl73wZxJLmxHwQpXhqpAAqFxZbJVAr7ch3fE2ZIpK8XZUEdCQeCB2z814i1551EDlQS1Gwk3h1pnp6GeL2+Rd/4h/CprMvDyXcKUkZmNCy2/JQgsoqW3ggsg1rX0K8ynz4BCQWR6zRAijzcKFlQFhoZYQByqLMAmBjCAtEmoxahMgBJ5Fv/RVQLmVVA+EKXSxBvDBWnloGcnOV+x6B3Wr40ogHF4zT9nEbJvNTFsBqadXac0FD82IOHF86yRlgNae2xGsQSrESL8EUp80LKRh355//SQV7+ZC4A+etSHJUMmJV1qw1d9MGw5z2pmzYsML5lgXtVLvWfgI0T7NjJaAQRtHGcgQUQFjkhQskKaoUqI6HRJEhJVKAp8qR4yaRUwWI6yO18STE3ZOVS0/CyPLc5XMuGHnDAdjIb5rKgkQp4SaACXfCw4bAarqhA0KPLcefAi2t+YkCtMvtZDMHMRKBnoSxxTMs2DBqnL7yKQemnVkrLmG3E/5VZDWpeTDmjnlY0HAaLwcuiILmxN4AUVdLcUDlxbJmgOZSZAnEYjw3WoIRTjj3PQtGNXnxvIRdd08CxAtxL2FDIh/3cCHIhmjAlH1f9tEZaOTetf7QhsNckA98iEmNeB3QVbVtgDKwWjUQXtzXsqDcdjpcBHIqqSrAUmxZM0HJltHyQCQ1V6sABZEVOrCklbU0aIuxejwJoR66bQtYJhNbAXIqH0qgrOrKAJZwqYOqU0NCh+mNvu/uGqAfpfQ0b3/6lungattbW7vrrTGwPn7CRm9/vYH842gQhO+Oa9Nd0AclyJ5CZBDYuSvX4IsdrLf/tesMvraulBvQU113qZf+41Uxw8cchhmM3l7+YK+HAW6Yz+ynbvsYyH/3KA4D/CDdbcUeDJUfbO+904efNzyewzDfe/fDH1TX8UzQeQ/60AfbfT8dBzp0XS9Gd+tHe+p1VQeRFmktCapIPgp6oxYJ4Jj1cPGxF+GE/Mln/7YDG1VfXjfhQ+cdDiWcyl6Qpgcn3BOeZsOEHLUuetDM/kgu2FDP31h5+zVg5dA9rEEsUAtUQXjaYnwRWFFmswyUVYEFoEZB5WBgEQpAraiUqoCW1JeMNIymL5Ueexaa5ZijPw07zg37Awfm5LxcACaNGWsS0M0xGwtC+8CZBQ6spG8+DXvuaunNF6DlN8zDEmhuqKs8aHVtJbJ3D5Od4DSWygBlCtigJL6qgMiSFoCWibmxRRhbvrCcWgb0OeP+TZgIFAcWjPlCAlzNXuXAg2a+aTdNuGhejKz7UxvmKQmt4ujqjAmjlbg/asLJxZTxswr2ES/qEkbzh+42MGVOeAA35E0CC0btUXvEguPVOXfCglvGyNemPCBIGOMFECttPTBBlZWv8kBGBBqA3fFkWFCBouMeKQnkol/lkFMmkW1FAWaW7ys/6kOsNv/k33gctOzezLoDDelL04at6pa3K2HOmLNmJDSrbQug6enMSBhfOFm/WIVGsr70XhXCUluGyzBr31/7tA0T3sObX96EQw69fRfa1S0OJGwVGl7owaQ16U04oDmaBGjlRl+YcWB0ZSZ18jlo1za9qy4owrwqgTDj5XgdEtW5nLkI4yvnnU+7sL90Xb1nwx17h30HZvOm/ZANrWrTA2h4h27LhAf9n+cpC7arD9k/ZcLNas35EwmzxkRet2HL2CysASrTsg89GEc3R2zY9NYrdxZBl4l8PAC10JZNE/bYlps+jBkj6fgCNKz95K4LlIPqng+aFcqGAy3zgF1ALIsl4YKyqberoHQhtTJoS6KGC2o59NQygFppFwGDsrAAXRhqEUB1XbUOA/XdQsMgQHMkGER/3wvmGSrxF07/7wF5d2Hu+tju+ub+s1J3Ae769u4/BtatH3q+tbv3kx3jpShP/++9zODurSKP6q0fuR8NiFx9LgzU1wWAwf7dDXgf3z/o+STv+hq/G+aHIbeX3gXSAKh2nt9tT7c+ExOTfg9rPRoEzuGp2S/f/jg+c/iz+H+efm8pftBF4vCxxJ4E3oPzQQl98Bx614OegU5XQjeIfNhXQUlVUUUQec0SJlBR2fYK3Ez/UfBvs1DXL4998znQi8eeO2eAufL3nv2nLmzbO+auA9tse6ELJ50TGDZ8Ov/EZduFM8Zn/skXbNjSbx1c/5dwy/ljfg/Yz72TebUIIg/CARYwVBZIdlzJmp3z76bIEYCoi7yoAc5BbqMGB5XXy7/zKBzIUW9SgMZnV3/Wg4nSgvlZQDnRIK57a3Zowm51V+5ZELc/bf5tB05XT5gPzMCEHXNCBb7/5svfmoW18pvVb3lAkqoogCrhYoEwo/ESNllSQAaQ0F5qVg5N2JI/yv2+AzH3g0olBY0VI3PWgt0FXz75PIzLB9yfsMDMz5uzgIo8ZnPgTnnnLHgg+185v3YR9HrzpZ0X4erSj8zvS9hc/MFrpWcgufyp+Z94Hm7lT9qnJexZTS/0wPRNZw5oyciEeCT/0JOWBZ82HjQ/70Ejv2HefBGulitf+8YqtDIf2d9bBLXULAclUBU8UY4kcbUM1KmqAkDk2V8ElMjBOj/UvSqE9ttP/KeHYCQ9lT3xMqhKYP5DE0asB700YJQME2BN3nFDF6YK9zmfc2C+dMl52AaZ+oHzOtD2t567fQr2ym9kvuHD+kKp9j8+AfHi2G9OPwq62fiU/TQIueA85sGJ6klrwoYDqwHA+PIDj3/egYvVh+SjL0I99f7FHwLb1Q+/dllB0/0g+E4FDkofLVcDCErXnbc82FhKiDEBoT9hnnwODCNn/7PHYLc07jwMUZQzG6b9414C2Ldb9meA04Wk+5AL5+3zL+oS3ue9y76EY/6sMkwYc/RX8UAaV8wbgFm9aJ95ErZKm9a2Ddu+72w8Duc4bZ6y4CP5ofO+CaOp2KvqSRiFR5qvwvXah9V3PJheHqkJG/ZTd/RrF2FrQco3c6AW/exHDrRLjdpuBjBERdmAoeywBASUIhfNHY+cvpJH0TB1egxyv2A2LNL0/oe7JfS/FPrLB/LOQqmW1JJaAmEKU5gg6IQFHMp313UHkFVZlVUZlK50pYOwhS1sIEuWLD3Jqgvgw9dd6jdluDfEBkMLfHDXq4vqrw/U77LCCqiqqqkqCD0K6ygWxIJY6GtP/3O67QCUVFJJUCgUfeXyLJIfauEgdxjVU6ZECVRe5VUeRE1URRVERXgiUglHe5qd6FHCEUvCAXLkyHEvAL+bQx38+96j9+Mm9J+NpRmuqTf6/YxGT1Pxcdb1HN0fbFdv66G7R97PINQ7HuHMI6O3CPCrlFgG5aq0yoLwhKuKoBkaYgnUEq4qw6F9qDd8GPN1S7fgvLzPmgbW7DtWaMHNQt1dNyHuazImYTo/a56TMGkEct+Em+WtF65LEJV4bSQNLLasQx0oY6skKF8tD8yjQFVxACgqCSoVJtt5QAoZVoB0a6VdhO2l7cz2a7Aq5YvyCozkZ+SsBaP5ERLAtDVtTlmQdE7KKROwznLGhXWv5n7Pgi15ffVdQOUJIp/toIogsiyJCLhdlSWKQx3NQ0t5gA+hA7FlTdcyIGyRE1VoVBoENoQrodM24YJxwZ0FcKJglB95H1mbEibyU96kCcmq6R734IZ8x/1AQlDbdG4BI57mKQOasuW3XViTd6w1CWdLl6xLLoyaow7AB9Y115dgeMftExLm8hPOBQfe827YEmgvbXPrBaBIFB2suze9qFZYBExqLAAeZQogUqSoAxWlh0lgWdXCJMSMmB4rg1gUKWzYre9mdyyYl9POlAS8yKP/lr1tb5kwxzFv1oRRmYiM2/wpL2lDe2V167ILzZWD6s5roC3G3HgWYuX4QtyB/dx+ec+GmcWYFwfG3XEL4GrhKgcWTPozzgwwxYwc8+BGftWTDrSXdqq3H4WWHXj7WaLvKQfCIqsASm3/0ASqO5V6AVb1V+ZfkJBYmn/mbwJTyfvNn7Th0DthzwK75hZbJpzwkt5xF4JCZKTYdttOy4Sp7LQNsGVsO9gw6k0wCYwZ0+DCLWfD1Cww8qfNCx6MZudczQUtteWcBU4XLtjHgJbfdgD2c8defUDCfOqinDFh1fvR49KGw5p4buRZODTeTe560M4dVhpLINDSZEEFoY4N+CoV+tH7VA50vu1BTR30Cyzd60G6l3Bxt1T+idFfHpB3gKsLLKOF0cJoAabsKXvKhkQqkUqkevmOooENA15HAlc1VVM1CIIgCALYye/kd/LQNtpG2wAtpaW0FBhpI22kIXACJ3Bg3963920QSyIyCuqpXD+OupJdBNQdyXqyOFmcLILmaq5WhG1j29jWQVmRajFRTpQTJZiqTHlTFRh1R93RFWAZpxM20uu4CBwYH0wihySdKGiN5cZyowA7qZ2FnRQ08818Mw9iWSwLh96Eq0V7QCqrsioLcS+ux4Hx6nh1vAJ6Xs/reYiZMTNmQuiFXuhBsBAsBCbsFfYKe8vQClpBKwBRFEVR7I03PQj80+H3zzqB/7wTvF9zMly258BmkD3qSto9hzK9O93aBnULXVXZ4NZAb4882otOdp5XUcsqC8pS2bAE2iK+KoG2IGo4EFrhcsuAa/Vrl689CSJ/ypn34ETppKWZcKww58xJuF24aQbAu8Xfe/lFD7bsP37u361C3A6tBqAhVmJ1AE3GdFBSBZggfJVWS0AgUiJiYA2WAYlJAQgEIgAs4VADkRQOVZioj3n6FbhYumhdtGHCmPOEB6KquQAtp2UDbMk1s+XBuysvr67YsMH3X/jGaxBfDjMNFzQ3VowXAR2v7QELYVWkgZIylAOqjqTSMQrzgRWRQ4IqKK9dgzbN/KGEWFL3lQ9J95SXBFRWeQDSlOamC2OpMWfMhfPueUv3QFZft9+2oJb6+hv/0zMQKwWFDQkxO1aKO7Dj7WS3XZirTW5OOHDcOw7A9dIN2XSBgjA1F457x6wxD96V/6f4lxZcTXnm7zwBI/n2M/susERVFEEto7MEIieWImMzlVVWp381EDZROMtllQy9iIEPA9B8FpUFbaeVOTRB88WiZsFsYdZCgi870zWPJxyYzR4DD1a9y/b7Jtyq/N4LhTcgXto37gho283MYQlEXpOaBVRUJXQgSB+4By/BBW/Gm3KhVWg5AAf5Aw4sOG0l5TEH6oU3nIoHN61vzv8vL0OscpC+Y4NKh07bAzJk1ALghbJVAVVuL7UyIFZiQcKAfb1uvm9Ay7zJh6uwX689570B287r+XkXGhmtNHYZ4Pwb9zvQLsUvj9vQKGDHJWwXQnm/B7cL664vYSw/YU4B2941N/Rgz7nt1iXMctGed2En61sJD0QqsgXR0U0cuFm46TZcGCuNmSOAZsQlNjT8QwITSDWMHQ9aK4d+4w1QSVHTCiB00poB+CKKVx90HMTouB2bGJ1oPvc8WNbpFwx6mtv+lfAvWQIfpk8eyLsSeAfAx4pjxbEinKqeqp6qgjCEIQxo2k27aYMqqIIqAFYnnGeXupJuR1WulbSSVoIJc8KcMGGsOlYdq8Jt87Z52wRREzVRg+ml6aXpPsl/3913913u5rh+HOn0VNIdiX9ycXJxchFiMiZjErZL26XtEozkR/IjeThVO1U7VYOETMhEDQ6tQ+vQ6knaWFgdgBzsXwfQRUqkRAqMmlEzqjDhTXgTZbhVvFW85cJh/jB/mAeRF3mR75WbsCfsiRzMpefSc2lIFBKFRAGaZtNsmtC223bbhkQpUUqUYCI7kZ3IwowxY8wYsFHcKG4UYS+5l9xL0mOouir+u1VLP+7d/0XS8HnMnk/4Qcl7+Jz+oOq/35ixK9EbfeX9jtFbsmP0ZnRU1l0NQHdLJR1tTYisyAsHlIdJFkI7dFUatDSm8GA00EtjDhiG8bjxPPgp39q2wS/4bmjCMWvWNJxoz1wHZlN/76V/BNQrl9QjCm7IP9z6PyTs29etHzoQBm2rmQTqohg3QGS0ZeEBWaGLZSBHTiwCSVY6/ch0AShWADKiLLLQpr3UsmHL3Xp1y4Itu+GOu9BIHXqBCc38oX1ogZbFExacK1oXf9mD0zzwyCPPQt39T7V/PQt7tWvBD6vQTrb8oAY4qqCKIIosUweRwWYJyAmHBWApcoarsipNBTSpZWIGjOp6fcyEA6fhHTqw7a7KdRemCtPulAtn82etEQ827DUXYFcm7BkTHjL/Pv94E3ZTb3vfeRxupN/0vuPCqB3z4xJOpk5cPuHAhrEBLmx7W9a2hAv+eXfOg9ALLQBRmn82bcL9hWnz5OOwbb5Z+OYs+MYHlT82gVwrE1SJog7miMKl1kAkO+GIc8Lq7JUvizSIisjHqiAWRV1LQdNpl5QFM5nZfzLrQiwVexVgvbru+R4cSx2zDQ/aTqTyP7ASTDnw6cX/xnvuMmxkv//EK69C3ammfl+Alm1Z+z6ERlgJXdACzYjZYGC8hIStqu8CaKVo62fMHwVApU65D0o4a/5n9lcfgbbxfvI7T8OdlR+637YBuVdoukBARgFqmZIqg1YhUDqooJ1qWiAClRFL0JSbhWtZCEprxdUckMIQFbhmvKOPvgBtWxniCYjpIyv6PGwHiexICQ6zrS+3n4KRhVFnLA/XlrTntFloptoeX4b95PHUaQtaTrww8SJMMC8ekdBwT198HDiQkVX+8dRxZjw4LB0CIFLjnuHCZ6xf5p85cMN7Q37HgXrqu86/eQpYWsu/V4JGaUu/bQAGydAEdDxVPVoTev/+NKPlewkt+sekf4KS+icP5BUqVEDzNV/zYTY9m55N9wCtbtSNugGNYqPYKNIDjHupwHWO9nZFXdRFHSbzk/nJPJwoniieKMKkPqlP6rBX3CvuFelJukssHXns+b9DXZV6d2+5A3DKU57yIuMnkYYZZpgBEk7CSThwy7nl3HJgv7Zf26/RYwg+rn89Y6skSRhPjifHk3CqdKp0qgQztZnaTA3WUmuptVSP8ZmoTlQnqnBKP6Wf0qEpm7Iph/gfDAAAIABJREFUoS7rsi4hKAWloAShHuqhDlpaS2tpGPVGvVEPZrOz2dlsjwHpMkQ72Z3sThZEWZRFmT+LBuPPM6Z/HrpbBh/WEEQfX1fV3guq003vv+4Zz3V/jYEP8Cj4SietG8+83ul/haBjW1AQgDC1UswGLK0aM6C12C6HK6DsQ5pZmPKm3GkH5koP2NMSNux1B+COd9u67cLt1E1bmTBTnTVPSDgmHzZ/2oZWxXfrT8P14rohbWharWLDBrXAsgYIO2GP2sBSTI5GGpRcR4WdimxDomARKqUW8CDMiRWtBAfVfe/AgX13/9k9DyazE0y6cMyZdaZN0LORCnrETwAQ5kMbE7ZLE94XPfD1a4++J2G3cn3x7QJQUzlVAFESOSpAVrkiSaQhsEDlqYo8kBVSc0DLx3IJQLMSSyMGHOZansrDRtJ/aWsTztUf8AwbzqTOejEP1uWaB3Aze927AZySZ+QZF2aZcgHeN31zwwSMd903noKJ3IQ9fgX2nb3NHTc6n44Jp4xTzEkYzY94AB/mP3A2HJiunvDOWHDSvd+bN+E939+6DQh71X+rCrgUKABlirhAngUKQJZlUQYqLIg8UBeW5oLIxOrxKrS7UfNMLUg4MG0b5rGLsFnYdPFAlZSrHJhNGS4e3Kne9toOxAoJqUtIStM55cKB3HS/YEEs9UH+zTdAGH7hah4atVY9rMKYO74w7kBMxp8G8OWWteXAjDXpTtpwKKMgNQfVpoMDZ9zPuF+QsFuKOwpYq36Y/UEVMA+KWyVQiyqvMqAWhIsBYjFWS6xAux5mQh1YpKQAVQpT7RXAC/PtJIh8R+PiHtZbASDDaggov+nuAYeLrJABVVZLqgCt0n4mbkM7oyrKAOFo5biEvfSBu1GFQ9n2RR5aRd+6WYLrK9MvzlrQLpyzPm3BZH7SAdh01+22hIQbNzULxr1jaDbEnHNmyoZZI8XBs7C3+D3/d6rQWNoq3FoCiiLSjPpHwacj6t+y69cEBn3/onx303Dax+X9CwT0TxzIlatc5fZU5yO5kdxIDnZq/1d7bxvjSnbe+f1Okexmv1d333uHc+etrjReUZbtoWyvt7N2dmoMA+4AuztUHCz4aV0DJwCxCCI6QADm05SQD+lv5iBAQiAJVFokAA1kY87uGuZuNqvSxmtTku3hSJZESTO61fN2eV+6u/r2WzXJqpMPVdVVrO6rF/tqZMjzAN0kT506dc6pqvN//s95znOOhkdD8CpexauAaImWaJE4X/2gcruyK7tw3DvuHfdAdVRHdaBoFs2iCafuqXvqJkBLh05sMvkrdVz2vBhwIwtBzIyLtWKtWINT7VQ71ZLPi3bFc/g/SHr06MFp8bR4WoSTyknlpAJFragVNRCmMIWZWAQ2m5vNzSaMnbEzduCufle/q8NkZ7Iz2UkBcaRYBf2gH/ThlFNOgXFn3Bl34Eb5RvlGGTbLm+XNMoyNsTE24HxwPjgfpO7TX7UfZ/v0r3d2aJVM9NwYdGOmnQb2xHs+zp2NWJcsO0krKolvRXh+OWJgHnVRB9kQZbEDQheNnAtzluo9uQ0L/SfMj2kw2ck5Syp80HrAvgNSfaA9B2x01w0A1V2zbxiwO/gz62sGfGv0L3b/x0OQ1tkt90vgc7g+AsRA0RQLCub1yvNAblRsLw9gw/o4L7wIN8xf+IQuodBZMFdeAN8+17zPwn39L7e/BLi1t/mLFijNeZYsWHaebn/is/Cs+9yLTxlQ6K4YABNrbAGcGMc2wDt823zThFHxP/xu5zWY9Pcr7+ngW+7vvvcZENpk57QJohxakOhLmxHQDfdvlwPqYgjCUNx8A0Qn351vQb6pmjctCFh0r9lQ2F5Vb+jwdOlnXv1ZHZ7sPmnkbLjbGDkBsFd5YO7bsGLk7MCC+/q/2/28Dt/S33r9zZdg6k5V/xasVVR104S8tsr123B3sPfGvgbXnGf0WwZsWhsGwHvmu9ZYh+Pq+8bbDvjd4a0vAu8M73zuO7twOrw3uK2DaI9rxyOgGE3pdeSWbIDYRhUdQBcdsQ3SFE5OB6WR9+ZrkLdWi09sQ9Bc5FoV1rwbW8++CLn28rfWbdi39u1DYNPcZN2GwAwtA/eNd7XbGpzU//ylf2XCV+t7u7uvwJF37zPvvA75LeUlHJjjhvkxC+QW3UIFNppPv3jrRThSjwwA352avg3rlU2tYMLd7tvaHQvu8W92/3cDDszj3TvrcKY/+PR7OgT6uX1sQtHcrD1jwlgNhooOC/pibVmHufYyqgkn20fVhzUoFuca+T5MvRPL7cGZdd90AOEE1sQDuRX0pjpgSk22QJYCW1RAEvlGWaIlHJBqoE4qwBBd2CD0/DZdoCMGShXm9A1uurBsPNHVPgunnbOXT3VYoWDPWZC3CwYmnFROjDMd8o7vTIBvV35/939z4A5f6/6HQxDFU/XBl8DXT9p7XWBb9mQdKKPRB+zQiTU1Js1aANPOw5CMOsl4kj3rQzW2//gZecxAIwCJmWagBmqgAltsscXswFtM5Y8AjQYNGiRMNnLKiueEAzMwAzPlNBeb5uOBOL186a/TxXE52bn7duTcNpIjOYrmzi1gm222U1MGBgbGD3GduL2RAvKw+bD5sAn5nfxOfgcCN3ADF1a6K92VLhT0gl7Q4Y51x7pjwaQyqUwqiZNdXI+4nnH/xf016Uw6kw48cB+4D1x4qvtU96kurGgr2ooG463x1ngrdb9iy8lPUtKm9XSghqtepWwgnQSuY6B3Z17cUuYpGUU+EkWKogyiLgZiG6goXq4MgY6jtIDRorrpwK3WP375vz2Aa9Yn3rjpwKF9qAE8qOxprgEHzoEudVgcKI7QYN/+sy/8oQ6ieKDvvgTSnTQ9QNlmK6gCpYK1rMNC7ecqv/kcrJQ/Kf/Bq5BzF35vwYHDrqIJDfINhTkLJq1z+9SCB9672luvQ15bNp84gPXWr77xTz4LedaNkgXvGfecQwcC/a7tmyAtNGEB1tg8d+DA/catPzZgUhu533kN6Iy1oxbkdDmYViDo05JFoCIbsgVyIC1aIHqiIUogRspObgtEM+fM2SC3xFauC7K3NnhagyeLv/n5f/YG3Br8vPE8MF+ZtwHedd61PB1OjBP9xIInrRtc0+GO9f9+5v804L36V175o1vg98aOZ8N17ZOtredAG26/+F99HvatQJ9zoOgu6HMa3LSfNHMm3HfuOwBua998YEJe3fv02xbsj77b+uouTHZO6vs2KBW/5lVBDChShaAjhxIQJer0gJboCA1kTbSULoiy4uQHIIb57twAFF1Vn2nB9e2XXvid5+Bna7/6+Z/X4V71nhnYIKon+pEJG+qGiQN37Pe0cx0OK29+7t/rMO59l/5LMK6cbrs6SDdwfQMKw03vpgqLO58yfuPz8HSr8vnfcOAZbhmLGtzWHf3IhNXumr5qgmxNNYD3Bl++1dNgXHL++794DaYDv32mwtQeV86qkO/MqUUTFlta9xffgJX+35H6bfiY+ym9YoPXmNqBDg/UO2vvfxaeNZ7+7NPA7cGfaP/yi3Bq9rb+p98HVKWoVEHiV6QBQpdqUAGq0pPhuFOmDmzJodBAeqIV1IGSqOQ0ECZFDAh2lFBB0X9e/fU34BfqLx/8E+Cd7gfmsQ0r6gpLJkytiQXg6Wf6iQNB63v8uQZ3S3/xhX+7C9PhQ/OuDrmSrExGIM2gMrWBLg25DXiyHX5SCzdRYZZxx9+T5bOXnZ3Tkl5uG0sybZeUGeZ5bKI8vqIeIWlnrCGX51xjYI4BMson6qIu6pDr5rq5LgkQxQAal5s1UWcB9qplaT+aSff7nxeVH3SDbtCF4+Hx8HgIi+aiuWjChrahbWgw78178x7MeXPe3FWf7pw756Y+S3OluVIy5z6pT+qTOhxrx9qxBqIqqqIKC8WF4kIRxoPxYDyInON2QPRFX/ST/hCWsIQF+VK+lC+lvOhd4QoX5vV5fV7nQvGamBNzYkKxXWwX26BUlapSBbqhN/xfuR8fp8xeP4H1rAnMSx1P1nlmX8gsQ0+es/BouGxxGJrsZRuPGtAQW0oR5u1lY70Jc+aqfr0C7w3u2B8Y8IH1PmMdllpLJsDz9vOaakHJfMJYN+CscmafOXDsHDeODmFSngzHKkhLelIFpT3XX6zCcqek3gKerf3M7U+acEv/uP2kDiXnhq3qsM66tebAQmPRKVqgWFi+DULNDfIvgzLKDwpArosR2LA0WDIWHNhUN501E57Wn9Y2gI9XP8a6AR8zntdLJtwwtVc/oYNoKo2cC0FJWtIFv+3b/gCkI8shsxGe6IEYKm6uCLhKM+8BRUXLb0EwUFqFCig7a5WbOlzr3HJ+7gCer3yS54GgEkYOe9v5nu5aMNbH1tiAW45mbGpQ1OcsgL3yO4PvfAECbVw7s6HYXugumBBUfCew4V1j13KAgpPXczo803jaWAAOqq4JcL91X39gw1PuM/ZNHdYaT7zxtAGTkm/6VVCKSjNng+Ip5VwVpEpNtgBHdEQNsBUn5wJ9Uc31gI7o5W1Q9LlysQw5bVV7sgXC2rCeeQGeNDTjlg3n5rkB4LYOtX0LnrCf0NccGGtjDWDfvafddaDQnNonDsjutOkB0vWHkxYUrMJwvgvszDdWbZjs+Ka04Zp93V7U4NgJd3cbt8ba2IKN7qaT1+Ghdmj5OkzVCRMD8nWlIy2Qhj+cVEDojIQJ8/WV1rUujNt5c8mBNe2mfsuG5dY1O2/Aw9apcWrBZvVp7Tkbis41o2DBpDN3sGZDrj3fWxqCqOfq89tAR2nmqkBHGeY8YCi6SpNw/XYNqIsw4M4ODcUA0VHUfAcUd95eqoIoLevXq7C2de25J4BxdRK2zx0bngkr1qojgOPusQkgKujCggLClBr41gRPBVGT2z4g+4E7LQK9YMvvA2VZDyxgFG2egnQj5+OLcUGGxC/r3JZdvZSVR8diL2Y+H6N8eF7rWeC9yr3fA1mTNVmDpfJSeakMalNtqk0YtUftURv8ul/36yTAni03s8wsdnJjhx12HmM7YsYfmczjOfKH/Yf9h/1wE5w8oJqqqZpJ9S5M/bFcXoYWSmyKjz6DVtAKWrDn7rl7brjJ2TGQa+VauRZMzak5NSHQAi3QknJjJ8OCWlALKtxo3WjdaMFeZ6+z10m8/0tmySyZoJSUklKCXCVXyVVSJvVo+Vvs2yB2xI5I9+fjMLX/qDL7gmXT44AvSZ7izO+sl/qsuBf7uruiTMjQi0AZnW3COXIVAsd3fQPmjWvd54Bf2PqnX/wf3oCgUTRzwH31gXakw9v6W6Zrw5q2zroFm9omBQtuVT9mPWnAkbXWUoG94fv9/KchGExHgQuKulov2bCk/+pz/1TCZHDD/IQJR9VTzTcgVwn0cwcWK2vOogF55mxhgGIeOPMaHNdWdlUDbqr/yRdfdmDN+hjPWiCrYeAVX/VtSADlyD6yfOC0caKdAW4jsIsGTCvKm/O7gEM1NwClWBgVXRA7gZXvg+zIhq+DLEpLtkB2ZQcTJEJTqlAYLZc2t+ETnd/6X/67l+GJ6i+9+Is2PKjs2VPAVQ+1AwdUXTVVoFQt6QUDziqnGsD3tK+b37TBax68OXoN8gNpTUzIl4rD5S7ky89//tdehjWeNX/Whmcrz2pLwEP7oQXwAR9wX4OS/oRz3QG1um4CfFDBXgByW8svbVZBsY+McQWCgdT8Ksi+UvbLoFiKXbAA6EkgKModeqA0c0ZhG3LqgrfWg8XqL1V+62V4uvZra1UdNlpPvZDTwdF3nWMLlgZL+pIDq+oqmLDb2DXPdVCMqXnuAKOjz9wVMO17xgkgHL807kJhWHQ2HVip/PKLv/VZUHc+ufb3TViqLuno8L3KW/aeDSuVFVaAuai2+6099jSY2ym4eQ3GLVkMTPBr0+2JDbl+rq4MYMV8vvIrn4dc9YXP/0MLrhlPWpsGnBonGsCkOtHHGqwbGygOPGw9tAFynVVtU4P58qpz4xC8ttu4owNqvu7roNQoBTr4XX80bYPohKtrhCeKwgE5kK7QQNQLO/MmFLxr1i0dlge/9sXfXoNnrF+zfwU4tA9N6UBeVywBzDvzFsDIHBmnDiw4RbPowGnl7AuHDvi9895pA5ShHPgeUA+caRvYkmrk3NaOIiDa1AlHi3AKJY7k6F6MH7MKf0ILsswd0pa/H+smKVn58TPyH1YyAWLy9Xw9X4c5c86cM0ExFVMxSQK8PEoi4JMlWZIlCPRAD3TIFXPFXJF0YJUfrV7xXPggXI+taIqmaIlpP/YFCIzACAzY6+/19/rhAPIBcL9+v36/DnvDveHeMDm+5+w5ew7sjfZGeyPY8/a8PQ/27D17z04+g0EwCAawpq/pa3qyfE6a0pQmKI7iKKn6xf0YWzb8oT/0h3DQO+gd9GCiT/SJDhMmTIA9fU/f02HP2rP2LLhXvFe8V4QH3QfdB10IGkEjaCQKi9SlLvWkny98EGKFKZ4aiSU26cf5HodkgXzWdD5rCIuPFy8+L3u3uzPnxzGXo5jrMg7oEy6naoltiiDqoinqcOS8Pxja8G3t33zOcsC3DjnW4aaxwYoNTzaetG/ocM65dW7Abb5n7unwvnbPPgGU7rr5lA2F8uLWWgUK5kJzGZgfFioFGwqOZ++bMHGP7AfAkfqQQwv2rWP9TIN3ec/eN+Bt47v2ngFO95u7b1hwt/KtSv9L8E339U//z7fgLw3b+f8c+Lb1F9rQhNutb5vv6PDAus+hA557ZngOLHYXnUUTtGrF3DLgY9svHvwXL8Kic737LCAq89vLJvgV4RVKMN2RjbwFfoN6vgMM8nZxBPnuvLU8gvnKir3hwEn1SHct+K79DfsdE47Uh8ahA09bz2jXNbjJTa1gwL615wA4qmPsGTBm9OZbBhSMSfUhII2gNW3BCXf739PgyPzq+v/1OVgyj+33dNi339Me6vBu9y3zNnBNu2ZfN2CjugHAe+Z7zlgHgcqTGjzX/7Xf/swXodBbt58Cpm3hzOlAI7+1UAdhzG0vNMAvi/JcFaSWU+e3QKnMuYvAtJ5zFzQAWZlqoHYX9ZwOe+4DpAXj6tgeW1AySsaCCYd2uC/5iXVkHBtQVM/1fRvOhvcru10IzGnxvA1KUdgYcF576N43wN3++mv/zxdg0Z1qhzrsVd63Tkw4V88Z23Ctek2bc+BQP3QAJubUmmqw7C1ryzr41Wl/bIAoynrQB6EH274B991B7d/uwvlo+Ol/b4Ay8KyJDXdbu7znwBKLzpIJBeYMgAP9QHuow3VTsz5hQan99577R58FqS4Orhmg2PPN1SpIOz9Y2IZgpDhzZRCNQmOhA7KcKxerELRyxlwDlFqhtajCuO3rQQXyaqCf24AVMvGH1YfaQx3Uxoaz6cDUjvYSrZ7ZngmLRt5UdDjt3XN3NZD9adOrAi25E9RAtoJhBOC9yEdpKC3CADAD0pa4xGdm1rw+m345subs1O1ltu5d8e2xyd+cEK3ZOXIbGxswo3XX2XyPkogpBzvBTrAD4+64O+6SrKMe5Aa5QcJwL+aif0C50pCGNGBuNDeaG8GcNqfNaQkDl570pAfzlfnKfCUp/6xyVjmrwJl9Zp/ZJHPMP6xEmuFcb64314PF8mJ5sczFAxSvo19rrjXXmgnzPq+d185riek8cAIncOCEE05ITO9KS2kpLTjdOt063QK/7/f9fqIQxIz/IoBPV3RFF+aZZx5Q2kpbacN4e7w93gbhCU944Gu+5muJhSBfy9fyNS4Uovg6P3J/XCVXm6xmQ/CmX7CYmccvXmjJSV7IUBP3ZGTZEVrU3yNgQEeaIDtSkxaInnCkBrSmTa8HD9Q/3vrnVbjX7w//xWswX934wtOfgU8Yn/nt/2YNbpm/bP+cBWeVM3PZhgPnQJsYsOB8il+34VxVWgvA2HngvKODKKMFEo5596VvObBeFbZvwU33l61fB4rVNQcN/MFER4ep7msADzjWNMDrF4351+G8/t5w0IAD+471jQoIq/DKQgVWBs996edsuNn4h1pdhzXnKW3NBl8NTEzw8AwFWHBe4DdtWDWW37hpwYm+a//lc5Bvj7ceAnOGYrEGuaEYyTWYjqbOdA3O6ufNyYsw7gRdLHgwfFd/6wBKzsoLGxo82/ik9awGUg3Xr99Wv2ceA2fGmXVuQMl9wt604Kh1x17VYL93NjjWIFDHpTMDlC2hU4dJ647zlzX42vb/an32CzBt8PuFXVgpPdv5lIAn3c/83n/9RXhfP7dvmHBkHfEQ0KznnZsaYDxv3TTgtLpgPWGAau+3nTUoVMeVh5+Fva27tQ/WQG4H+rQJq/qKs/pFOKufW+M3wPOmerAGK4O5hgD2jLd/7+smPNQL2poGN7vPWc/aEPJJuGN+wIEG686GvunAtLXPWxqMS97g9CUQW7LkDwBb1oI2BMVgxy/CuHi7/GUDvtFqq/+sAl6PRtGB51rbL/yXL8Cc/vPGk8A7xi6uAevmNe2GDoVGwdnS4E79K1/4QwFy+7x9PAKpBoOpB0H9xNhrw8HwP47++Zvw5eaftf7vN2Hi5lk+hJ+p/Gev/o4BDx1V+3VgYk20sQ7Pus/YqybMmX/PrFpwpq389jPPwUp18om934N7LefWt20IKmP97AlYsheYP4DD6oFzsAvzXnFn4VWYHy1Vlw/gcHTqjC0oVH39RIO9xq6168C4gT7vwGpr1VwDDruuAaC4ShgAx1h2lnWYDHwbHUQJaAKubAVFYEBThpa1ShhoBwc9ettH0Xjghu+5jJm4w6wkIJ4ec2ICMDs7nkSC+1AY+t8cIH9MEq+/jiOWHevH+rGeLN9aZZVV4GB4MDwYcjHAX5iKMyb6mHHHgLg2WhutjZLfx83j5nEzmXO+pl5Tr6lwXjovnZfgQfNB80GTJPLcD+skFvsSRMz2ol0DOZADLpbTnbROWictUF3VVd1kPfj98v3y/TJIVapSTQA49l6Pyyn0Cr1CD5b1ZX1Zh73yXnmvDPPd+e58F5YHy4PlAbg9t+f2kvbHc+3T/rQ/7YPf8Bt+AxZ2FnYWdpI5+RP1RD1RQa2qVbWarFaYVqfVaRVEW7RF+6950x/1gny/FydrWo+XnyVzYG5kYosjvsWx18O5tL6syWE4EPq9cBXBpAWKrZi5CuS26Ux6QBdVVuCOdVfb+yKM9e8Zpw6ss24uanDDueEULLjhXHeeBM4amvmfA0fqoTGx4UQ9ch4aMK1MmZgw1fNG3oIPKvftQwcKmqvN6ZA3clbegjPV0QYmHDS+uvv66zBtHn/5vgl0p50zQJan9jkgu9PBuQFH6vvt77wJTuXr2ldtWG6M9b9vQKBhSIAKmgTmmHPmdHjS/ln+rgXL1V959e8aUKjm/gDg3PRMdDh0XedUh0PNdVwL5kw06YDaX39hw4BN6/ofLFiQbxRsgD32banDvnOgHxhQZF4v6vCkoWorFuwZf2r/Sw3umH/+yh+9Bv7oXDs2QWxLY6qDGMiKNCAYjTu+CbKu1Kce5N3CdtECWTty75qwa37tza9YUDQ+afynOjxb1YzrNuSqOQCcxm173wHV1YxPavAs/0D/JRPuW/fekAb45ujlOwY8Yzz98s1XQVGVF3gVdlvv8B7wnHmN6zpcrz7xxrwNu8a7zpEOK42cnbNgvaI6AO+77xsTC3z91DwGju3vaX8C3Ov/+a0/+hIEplc9MkDRZNGvgtwOin4H0MRAMUHZkcVpD6atSXVch6XeLeuFP4Cnup9845cs2LPv2wBTd2L7Dqx3V7W8Ae/ydfPbFvjamffwTRAl+rIPsu9rkzrQYSt09po2z3vgd4JBMIJcb6GT0yDonhwcvgEPKvcM14BlbclZMSGn5QyAg8qhc2hByf5Z/Zdt2BhsmEIDr/UdftmBJ7rX7Ws25LWcjQHvGLvy3VdBszTnGQvOBt7tqQHzjQN934KPm39HvwHc6963JzYsdMfGGChU8zoauM6+eegAVZeRDrftP/3C/+HAsbP7pcEroAxpB+fAKNjxS4AuB1IDNHZknxDIW4SSBmIvA8xZpp7sDZHd9YLoLKLUxBsnLE+9OJadxnsM8qEFhPnQ8sVAHJlyT5wT58SBo9HR6GgEG9WN6kaVCyB86D50H7rgV/2qXyUxCUdz8PlyvpwvJ8Wudle7q13Ya+w19hpwXj4vn5cTU3dQCSpBJQlUc9g4bBw2YNKf9Cd9krnvH2RZiIA89kZfsBasBStZXhYrGOf18/p5PVFMNtub7c12YuJ3VVd1VZiOpqPpiMSZcFtsi20Y18f1cR2UjtJROrDUWeosdWC+N9+b7yWBbArFQrFQhLyX9/IeHLvH7rELc8O54dwQpCtd6cJR96h71IVrxWvFa8UkII9ruZZrgdf3+l4/5Yz3Qy43/L6SBuC0rpw2cSXrxYlyp7Xw8DVLm8ziM91wkxQIvdUpMaIPVBjKJjCStcAGWfS96Q7IobTP+qC0hSN6sGyvtFa7sGmvaou/B9I6184sGFkjxg4I654uLFhsLJqLFqzqK1rBgGtctws6PNEtsemEFg6A82oY+MKzTy2Ah417zgc63Ot989afAG71q6/9wTpMe/udXQ2Uhiz7ZaAubb8EFMNY6LjKKL8DePnq/A6cm++Z3zBhhY1XS8ANPu78vA1L6oYz50C+UtAAJtWJAXBcPdYAjqwj49SGM+fM8EzIm3krZ8Jmt+Tc1GA9DLSKgqJhgWuEgUr23AeGq4NvTmzPhNVKwUADxblr3Qbe2vnyS//6JXgw+ubhH78CWOPWiQFKG803gXqgTlUIdNkLbKBLAxsEsup3gW0a0oTz7sPRAwOClqO9acHm4Gn5cROkdapt6uCwbz8E8tWCXbThmcEz+qIJLq4D8KD6wNrT4anqc/pNHRatZQPgtn2bhxosV1TzmgFPtG4yb8MdRrpvwsQeW1MLbnaftlc0uKu/re2b8L7ztTcHx3jGAAAYlElEQVT/1AY52P3cV1+Ck/r36n/2Coxrx+aeAbkWxWALpBVUpiWQxWA7GIJoKyXZhqA/bZ23oWA8NfqYCZrxGy//jgXzruqsWPC+4/AAWNdVbc2GiX7sTA243/3u5wYmyMqJ8+AuiJ4cTlWQjUD1d0A0qckByPq0Ll0IRtQmTZhTiztLGhw37w13LQhq88Y3LPgZ4xf5VQ0eauFcua/6Ngasd9c1ocG+uW9gQ468WbBAHWxa2PB+5X1zrMNyd93cNGHRWrMA7lb39TMD1lrr9jUTsLAx4bB1wKEFm9qqsajDA/u71h0b7vX+ZP2PAL+0O/iqgLPSB83hOgTFsXfqgbJF1W+CrMhw1ccAJ9r5bBSFZh1Fe3uMLqbUIkae8VnK4o2X+j+7XC38P7tcLW0Z/DHKh8fI40AuETO8iOkde7NnN/mI1lsLW9jCTuWPJQvoFhYWiVd1HMo1MnnvN/eb+83EZLyxvbG9sQ3L3eXuche8ulf36uBX/IpfgbyVt/IWLKgL6oIKeT2v53U4GBwMDgZwWD2sHlZB1ERN1JI58sPSYemwBKVGqVFqJFPyp96pd+pBsB1sB9tXtDee+4/ntqPIdHHktRw5csDh4HBwOEic1OI568Odw53DHVB6Sk/pJYrHUnepu9SFM+1MO9OSdeHH1ePqcRWmw+lwOkwsCxvqhrqhwtSZOlMHDjoHnYNO4h3vD/yBP4DpznRnupMyvUcx4ZW6UlfqiWITK0hKWSkr5cSSEed/LFKM/seaNKRfpEQvnn0hk13R0hp3XIJ66YV0L+bK+4AnKrQBDVWaQE3uBAbQDxw8CMyxeWaDy1u9rzTAqx8cfvAaLJjXfvfZBgh9qbXxeRDFlVs3gIdO0VwzYVSef3XFgXy9aC2aMK8VzUUT5hvz1pwJBRMz0MBvHbOnw4nrrH/NgbPt71T7b4LgiJEO+YGoygHITjCYVoFO0ApVARFuz1oLwm1Q26f9vR6c9r/l/rs6jOz317/uwr6jvlJ6BZTyUnVdB2kvVNc1CBqFypIOwivurtiwUFnTNh1Ya2xo13VY0laMVQMwXY4t+MB4Tz82wNX3eWDCeHjy0kMd5ra4NbZh3pgOTm24276jf8cGd3C79fXfhYl1NHzggeJIb9IFoYqmXwNp+9tTHWQ1qPgaMGAgSyAaUbin7cCZAsG2rAUdoHts368AO2+P/mMZ3hnu33r7dXBq86+s/S7IdlFfc+F649nXfwZ4a/BN45oBbu30S2ML1irXzZsW+GbeOQXeMr5h7RlwzrkxNkB1bzo3gXfdv3COHLjbeV+848BqcU5XdHhHH77+UIc79rc+/ZV1mPbvd2/vAk1v5+A18IfjoVcHpSgt3wN0afseSD3A7wNO5DVflnUqIG2/M23CtHKv/W0XPhj+q/bOIdwpLVeuA36jaG04oKgbr6w78MGWq+/p4Fl3vjDcBUVVhhRBqmN90gJKUg2M8P2QI5Bbfkt6IIaiJrfA3zl29rbg3s5Xm6+vQ77/nc99+RX4dvcbr/2hgHFL6S68CvOlDXHThA+sO9bHTNjrH9vnFqxWN7QbGuypvrHpwAP7fe0DA65Z17luwF31m+Q0cJvvGe9YMFfZNNZtuD34pr1ng6u+/7ldG6awfmqCW3HW/3IXzor3BrcdyFl+yXNAWtO2NwRRknV/CDSl67cAQ5YCA1DpyTIhE2+TAHas7MfbGIdeMIniH0+5JXt9zM6JJ2NKPNokgabS4w9cBf6PTcSnzE+ZnzLlYxtTL0nk/JQb5oa5IVznOteBI444Ao4Hx4PjQQLYMdOMI7attlZbqy24595z77mJCffCaz1CrGtb17aubUHQC3pBD/a1/TDSU8SwZUd2ZCdxUltyl9wlF1a8FW/Fg4JRMApGEtglNs17rud6LhwNjgZHAzhrnbXOWiSm73hdeAzEkUk+nstWt9VtdRsKbsEtuCQM9FGbuGRC0cbOaLFp+yJCXJwvLi9WZCLT/UJzobnQhFV9VV/VYV6b1+a1JP9d66511+Ii4pviKZ7iwbXhteG1IZzpZ/qZDkfmkXlkwkJrobXQSpapuSN35I6S68Zz4+pIHakj8C3f8i043T7dPt1OvPdPyiflkzKceWfemZeY4B+DeI94UWIgz647j/s7Ye5q6ni821m8L3kcqhWKogR48X0TGluARo0WsCVsZRtEWWwpBsimKOeGILtsKX1goBi5Cijk3TkXchSsogvCyJsFA3AUPa+BtGkpKgQVNFwI2kE90ECWfH3aBVp+bdwFSlPjXAVhBv2JCrSDxnQLKAVb0ypQlP0gNCHW5ZCQH6iAy46oAI4o5xrAjqgowzCSl6KBrItebgtEVVg5FUQr3yiE9e4WNFDq+dJcCxQn1y9UgJIyyOkQdGWXBvi2X/YbIF3Zky1QDNFgALmSUsUBHL86qYDfGhc9G/zSxD43gVZgTS1Q+tHuYluyOe0CeuD6HZAt2QsGgCa7chuirVyT+2YTbobhibaigxgopVwTqCle3oRgIGvCBUZKRWlBvlNQ51sg66KSc2FaDhxpQK6fb845UKjOVxa64O9IXXbBJ9CkA/O9ebVoAAY6GpyPPPWsAcqOGGJCrgOBA5MdTz1xQQ58Y1qC3FC4wQik6Q+nGshKYE5sEEPZDFSgF8Zol12pywGgxz4kwhQAO6KjOCAcMcoVQdbEjhIy6GquD/mdufp8DTBpiTb4rYk2HoBSEnqgA0ZQmQ5BDv3yZBuoyrpsAGq0aYjNiDKIaHkYFWUn54IcsaOUQfTzemEI0qOheBA4tMQ2FAZz7sIQZFsYigN+R1pCh/n+QmtRBb8WwmRgBVuyC/PefHnegEl30hjrIN1AD7qQt3NVpQJjy6uemiAGgTltgdKjEVRhao7rXg2UfugNT132/RLIru9Nq4Apa0EZGEYA3qcuPUJLWg9wY0WcmJGHc+LuxW6W8SqiZO8GN0qPKcKs4j+bfnnxmZoCe6Kcj11+/EAeNzgCmJyds3M2BKWgFJQSk+wFMMWMNFrupAyUgTK4wvSdCWkahxyNGX4wCkbBiIQSx/nj0KrRsiyloTSURuLVHpucY+bsj/yRPwKpSU1qJJHNsuXGEtU/9ibP6Tk9p6e85mPgzwJ5dhldNDUQX9+3fdu3uYjodsn7PuP1f7HrmSMc4UCunCvnUow4jrkee5/H5yuqoipqsszsYve1aI4+DiBz0b+xRE6GuVqulqul+i3anS7erCV2bovv/2MxrcfiRp9q9Ct+wcL+SUI0hECdwH7MzNP3waN4sW1sDOwhoMf9HsZiJzrPEyUqQBEdE9iip1RAGEpFAaiILWUbsMRQAWSTcLe5vugqO4AhSkofxFDUw9UHiiYMYId2pOgMZAfoSFXugGzKdjAAzCB0b+sEhl8COZBt3wDcKBCHJ5vRyz2I5gTjdob1VEVb0UBsiaIYAjVRzekgTKWpNICqKCsuoApbMUG22YqmFvpiG2RZ7jAC2WaEBsIUbXogtoWh1EBowhPhQNmTJsh+UAsA2QvUoAmMJIEGwmUoB0CLZlADOoEVdEE2ZNd3gJGsyxFQjuY2tchXIdqUhRGjyEmpHAbqoUHI5NuKBrJFTZSAsqIpJRAVpZwrAQ62aIPcoYILoifqCiD6SjU3BNmUHlUIWnIgi5DbzjWUFtAK70tQ96u+DnREnS1QPNESWyCrQcdXQWrBVtAE0RJNaQCdoBWYIEuB6heBBj3pgFDZkR7InjSkCpRwGUbPWxkYUEQHSqIjyiBaoq5sg6wKQ2kCJTxlBEpNGSh1CDqyJXeAnvQCHYSHJx2Q1UD3y4AjK0Ed0HEiItKT7ei51oAKTXqALbbFCFDFSOmG40fOA1kUJVECURVbigaiqWzlRhB40pI6iL6oKQMQdcVWihA0/F4wAtFWOooNYigcMYKg6Rv+NghP6SsWiCJdWYcAv+kDYiQ0mkBDNgITZDFwfRcEuHIAshm0fAvoS1XWgC0GsgoMMKNxbUgXKEovIlrD2Ev9goGHgB3vR541sc8uQ7vM0BOjegLdSTnpkSZN2B6z/PiBPJYYuFpRzOKYUT/Ka/kHRXbLSry8KRP57ZES34jIOz5m7BfMOjLNx6bzi13Aftj10nH50XKri/IftW48K7ETXuwkl95e9Ee5fqy4RKb/C0Updu7LOt/FzD5ub/wZWyDiqZBHTXXE58fr7OPy4ymP+P5kN8V5HOJlfqVNW2mQzzLzYiq3SmKSL2XyqdF/FVApCS3KVYrOKwOeUCOLi0YVKFIVLWArDEkptukKDSiLlnABB50OyB6qqAEdwr27R6hsASrhPvflKCBNBZcuiDI9GT4PpoQQsD2QrjSjXZw6sk44cHUJTYfDi7ZDrIgUKUfLcbYxAU/oogW4hJ8OFZqAQ1mYgCt0wuemKbogDNEWA8CkQx/YEuGmLQM5wAGaNGQNZFPWooG1yw7QoEQfhAGyDbiyIVWQFluyDwzkTuRlPIymMLyYMckYwIeE71PIuC7uS9T/xciyVRQVws1jdkBURUeEDDNsXxuHMrAd3g9h4YotYIc+KkiDLkMQQxGW08AUbZBeNDUUeS0LVwzpAU10WQJZk57sguigRzHv27IMsilV2QXKDKIQoSO6wIButCd8qKCUovqPiCNTQgmoYIgdYESFBtBHE00QpugLDeQIFR0waWKG9YlKbcstoCcN6SXPEeBIm3DcGxAq1rGCqgFDVLEVPR09wBNV0QG6hNudWsJVqsCQCibIJv1oL4wtpQlYIe+VprRkH0RJlJUKyCqGNICutGhH/dcHWZGeHAAuHQwQVrhrnqzKYdAASvRkFdDpYwAdacgiUMKRnbA99ABHDuhBZH0KgdohVPgcEgCOvdbT68ZjIJ9l3AlguySAHu+uSCo/xE8GpN+4HwMTj+XDA/KP5Gp5lPPeTyLAyk+LxJp0As1XG95jJj7bzwmQxwxdJTG1JyVcYuyiTAIkRRF+ehGj8lCjAVJDB1TC/a3L6DSAktBFDYRKORp6VTSQTjSQxMA1kgPZAzzCgeqCcVx8jmQ/an8I3NnlMYniMqvQxPVTI2dMTWxFqVtAKQJ8lQo6CFWUhQ7Si/I7jPCAoQyZTRyaOS69IkLLSznqRU+GADKgS6gw9Gin6l+ieBGgY8TMQHyxLCgcwNWZ+zgi3l/eu2iNBpQIp0BcQkB08EQxuhuhor4d+ey4keXOoQjowhB1EFEgINmVXWwuTK7CEAYGSIfQZNuVbbkDVKIgv2XCZUw92tEsftjuMuG2p6PoPDcy9cYKiXcBGKPIchdbANUokIkbta8SMnUqYptQ4XZIT72FT+mAnuwQGoxjRSG24KUVPDWlQHgklqhSdB0nUnlVykInfH7rQB8nUja2qAJboirqQEfasg9UxJaogqiECrxsyzYWsC30SGENa9CRbWkCevSkeAyxgT4WJlBBjZ6vvuySKKql6N6OpBOZzN1orjtm0iGAp31lXBIg5+K5mQVy9SItC+jp6brwV/z9Q2TisXwE5B/JT594qf+QAG+YmrxuEQBfHAlzJab1eBAIB65kCiTNzNPlh7+LIswXAvnFACxi4FcjxpwMMrPlJlM2pSh3fDys7+x693gOL17nTmagSvfHLJAnigwX32ftGInZMN0fSe8WU8fj+scMRY3amXbqDIEr8SVxUu1RSd+lNJCF+TwZtksVSc40E3Kj4/Eu0tmpkrSrYwxQ6fsTMzI36oFSJoS0gzNjSdMoR1NC4fVjS1Up1f4i4ETpRIARH0+uF7YvZuAXYCIThkjUrmIqPW6/KkrR8+RG54X1KUVOja50I0UoSS8Cnkz6N23RSJ6daBfGi/KT+x3mjxVUZvpXi/oty2fj9MTCEB6Jp9ZiRfWintFzHys68fMev3OOHDFg1vksfL5GMwBOFKExAexEsY3b787mj4B7FsjTAWFiCduehfcPZU48Kx8B+Ufy0yvxC3sV4/ZmUmaPphleonXPmuITZ7jiBVNKWM3MdUScPwTmWAGITMERwCcDZVRKBEyeiH/PGuou0uM6SS8zsKS5AjPfZ9ufKDBpJpvtr4tfYrZ/ipl+SUqNgEo+wuIkEntJDPQeIWCngSddi1mFbHa9f6yIxIpPAkijGeArRfeB6PoxMMb5S5El5eL+yVHmeAx48fnRZjoZBSIG0LhHLxSQOPDvhcUi4WvFVHviZUwxwKcVjTg9fR+Tdc6xhcKbURguXyf22p71EcnuZZFWhLxUvmxI7Iv3QSTtd6N2py1ao6i/VJFYgopRP46i9LimXpTfSV0v7XzmzNTvwkR+EdAlq/DOKiNxetZiNbt6Jf6dPI/x252odT9BJh7LR0D+kfz0ipf5NQs4sVfq7AuXNbVfFRFuFthnB8IYoJPfl+biRVJGmJpmrvGQmzV8e6n6zw4w6bJnGXOYngXSYuY4mXKzCsv3n+JJB8xI0mbbl+63dHvSzCc7gH6//GlmrJLt38sBPIokJuPLm+bMWlwuA2Oc5+rNmdLHS6QBYhYQk75JGDWp40l6HFlMFepFb0DinBWrDLPpyX1U49DCMnMfovR4mdVFvYWayp/060X6zP3N9lOSv3hl/6U3xYprPZuemLRjy0xaAYnPSQA7VoCYqW/CuNMps4reLLO+/Lxl05OWcMVYcVk9nVW1PxQmHstHQP6R/PTL7CvnXgyh4TF1JlcaqMP/CWNMM4iY8aQB+CoGnzD3BJjSgJKuY5QiilyuR3aAKGbO/X6tvszRr8o5azpPH80y+qvqkNQ26Z90/mSwzqoa8dmzrfUuTKJZhpTkn+2DbLmxiXvWAnEFgIvs8bSkgeuqeifAk/Vmnp2ycVNe0mnAyvZL3K9JeswkLz+PVyks6VqmGXpa/cteP93utLqSfh4u93eSK3quZxQI9ULhYKZ/soqXG/2pmfq7FyGSE8UrTJ/dlTAB7MQUns6XWB6Sds7ep6t2ZUgrmMn7EfanS6xguVGPZeVDBPBYPgLyj+Rvj8QD6eyrN8tQ45RksHmUKT7LyGcZ7KPyp5jTI9Kz53FRv8tcOz3QzjLrJFd6CEsUkqSOSfuvKqOY+bsMuVlGfzVDT9ck27b4rKsY0aP5TTZ/th+z7eYi19X3KVmuGJuCrwLM9KqGqwAyXY9ZBpjt40fVPz46u7olC+BclHd1PR41FZGdCskqNlkLSJxyaQoklT+teCTKU/a9mlUILt/nJP3qds8y9KTUy0A9mz7b/+knM1tOSpm+OJ74jFw+6yfIwLPyUxdr/SP5SB4ps69kMlykWZsXOat4EXPPAmL6ZXVn8mVN8MnAHA8gWeAoptJJ/coCXnqAjSVhULMDcXpATV83PeykB6CkzpcjUSXXShQA79LwlRxPy1X9lW5/1qSernd8/ixAxSbYWa6fBu/ZgdmdKTO7TCi7CDStxIyIXdMuH08z5XT7k3zx3PQscKTb46bKycJBut6QBtCEYc4qFLMKQVYJugzUWQXDm+mf5PoJQ0/f9yxDz9pB4uf9sn1ktj7uRflXWxjI1Cc+o5hKT/dHVgFJP6fx851tQboeXqqmXuY8NZMjfX7ctp+wfATkH8nfHplljgnEZAfiMG1WB09M69kys6bnZLhOM5osQBZnzrpc3iyLSErO8oHLrnz8gByzR91L/RADVLaGXqbshJfOKgqzV3NT364aSNNXmS1/1mSarXeaWcbex2m5wlSfgZZZSRSoWd6XuF4lgDoLdJcVrCxwptPTTDc8//LxdP3TwJ6eC8/mT7d7Fui4qOdVAJsAu5v6fpk5z7YqDXBJ/rgdVz0PXqb/0k9N3O+z72HSz7PvQZJ+lck8UZy4OBL/z9Yz229xu+LzZseLy+PGT5CBZyUfh9b8SD6Sv3Uy+4JmneFmX9zLMDDLtJKXehYIs4w9Aepi5nqPMg0ndYmBLX19MvmzCkB2sLmcnn37Z42JaaDODs1ha2d7Jq3AXCVJeW7qrNn2ZYfYeGCeZdSzdy9dfrq22dalGX967jtm2GnDeeyVHcusqhCWlV3WlpZZhWw2X8iCE+c9L5V+FQNOyp+9c1cxZDdzXrZuWRBPP+/pp+qqZyn+c+HCK3/2+mRqnvTzVf2X7uH4eUt7w6cZd+w0N/ucFGcYc5ahX74/s4pBsskJF0fTz/cstMdnzMrfAPwUzw+fHz4/HH7xh8zuhJ/hTkjJ70s7t34kH8njFD388KOf08db+tVAnvy6ChQfxYSu0tezCkJyzcvXT5yGLsF57KWbWXj2I6dn5YfNN1Pv1OCfOT9xAvwBZcTObI+od6JOpEEuXYe0zPb9ZYWLS/eHGSe3+LrFjJNWGpjiUrLPwWx9LwHjTP8UKcpZxeeR9bsEoj+c/OhnPErSjDxbv6ziQdJvVz5P3oUX/Wz/kum/y9e9SMs4P876IlxW3WbhOPvGpuE4rFdy9FH1enw9+9jl/weP1gU9kF8l8AAAAABJRU5ErkJggg=='/>]]
  590. end
  591.  
  592.  
  593. function removeUIContent(window)
  594.     dprint("Removing widgets from UI: ", true)
  595.     for i, item in pairs(window:GetItems().root:GetItems().content:GetItems()) do
  596.         window:GetItems().root:GetItems().content:RemoveChild(item.ID)
  597.         dprint(item.ID..", ", true)
  598.     end
  599.     dprint('')
  600. end
  601.  
  602.  
  603.  
  604. --========================== COMP MANIPULATION ============================--
  605.  
  606. ----------------------------------------------------------------------------------------------
  607. -- Fusion can be locked or unlocked multiple times. These functions ensure that the lock state
  608. -- is not nested.
  609. ----------------------------------------------------------------------------------------------
  610.  
  611. -- Unlocks the comp
  612. function unlockComp(c)
  613.     if c:GetAttrs().COMPB_Locked == false then lockComp(c) end
  614.     while c:GetAttrs().COMPB_Locked == true do
  615.         c:Unlock()
  616.     end
  617. end
  618.  
  619. -- Locks the comp
  620. function lockComp(c)
  621.     if c:GetAttrs().COMPB_Locked == true then unlockComp(c) end
  622.     while c:GetAttrs().COMPB_Locked == false do
  623.         c:Lock()
  624.     end
  625. end
  626.  
  627.  
  628. --========================== DEBUGGING ============================--
  629.  
  630.  
  631. ---------------------------------------------------------------------
  632. -- dprint(string, suppressNewline)
  633. --
  634. -- Prints debugging information to the console when DEBUG flag is set
  635. --
  636. -- Arguments:
  637. --      string, string, a message for the console
  638. --      suppressNewline, boolean, do not start a new line
  639. ---------------------------------------------------------------------
  640. function dprint(string, suppressNewline)
  641.     local newline = "\n"
  642.     if suppressNewline then newline = '' end
  643.     if DEBUG then _comp:Print(string..newline) end
  644. end -- dprint()
  645.  
  646. ---------------------------------------------------------------------
  647. -- ddump(object)
  648. --
  649. -- Performs a dump() if the DEBUG flag is set
  650. --
  651. -- Arguments
  652. --      object, object, an object to be dumped
  653. ---------------------------------------------------------------------
  654. function ddump(object)
  655.     if DEBUG then dump(object) end
  656. end -- end ddump()
  657.  
  658.  
  659. main()

Obviously none of the buttons will actually do anything outside of our environment, but it should be reasonably easy to update it to work elsewhere.

Actually, I should do a case study of this thing and put a generic version in Reactor. I'm quite proud of it.

User avatar
SirEdric
Fusionator
Posts: 1960
Joined: Tue Aug 05, 2014 10:04 am
Answers: 4
Real name: Eric Westphal
Been thanked: 136 times
Contact:

Re: Auto applying a template between loader and saver

#27

Post by SirEdric » Thu Sep 27, 2018 12:44 pm

Midgardsormr wrote:
Thu Sep 27, 2018 10:50 am
by Bryan Ray, inspired by ScriptScript by SirEdric on the We Suck Less forums
Thanks, mate...:-)
Also, nice to see dprint() being used elsewhere.
Glad to be part of the igniting spark.

Cheers.

Eric.

User avatar
RBemendo
Fusioneer
Posts: 153
Joined: Fri Dec 12, 2014 11:32 am
Been thanked: 1 time

Re: Auto applying a template between loader and saver

#28

Post by RBemendo » Thu Sep 27, 2018 2:01 pm

Brian, WOW!

That's exactly what I had in mind when thinking about how to approach this, simply amazing!

A case study would be fantastic, it's going to take a me a lifetime to figure out how you did all of that.

User avatar
Midgardsormr
Fusionator
Posts: 1215
Joined: Wed Nov 26, 2014 8:04 pm
Answers: 3
Location: Los Angeles, CA, USA
Been thanked: 95 times
Contact:

Re: Auto applying a template between loader and saver

#29

Post by Midgardsormr » Tue May 21, 2019 3:18 pm

Ran across this thread again while hunting for something else and realized I'd never linked the case study:
http://www.bryanray.name/wordpress/tool ... or-fusion/

I haven't generalized it for inclusion in Reactor yet, though.


User avatar
RBemendo
Fusioneer
Posts: 153
Joined: Fri Dec 12, 2014 11:32 am
Been thanked: 1 time

Re: Auto applying a template between loader and saver

#30

Post by RBemendo » Thu May 30, 2019 6:02 am

This is fantastic Bryan! Thanks for updating this here, I certainly missed it.


I just ran into something with the "auto apply" template where I'd like to update a template i've already applied to .comps. Is there a way to Delete all nodes between LDR and SVR, then continue the script for auto applying?