diff --git a/backup/240700/_astro/ArrowCard.CnJHY5Ig.js b/backup/240700/_astro/ArrowCard.CnJHY5Ig.js new file mode 100644 index 0000000..5adbf8e --- /dev/null +++ b/backup/240700/_astro/ArrowCard.CnJHY5Ig.js @@ -0,0 +1 @@ +import{g as O,b as ae,i as z,f as ce,s as de,t as U}from"./web.CIE_19Vj.js";function te(e){var r,t,o="";if(typeof e=="string"||typeof e=="number")o+=e;else if(typeof e=="object")if(Array.isArray(e)){var i=e.length;for(r=0;rs(n))?.classGroupId}const ee=/^\[(.+)\]$/;function be(e){if(ee.test(e)){const r=ee.exec(e)[1],t=r?.substring(0,r.indexOf(":"));if(t)return"arbitrary.."+t}}function fe(e){const{theme:r,prefix:t}=e,o={nextPart:new Map,validators:[]};return me(Object.entries(e.classGroups),t).forEach(([n,s])=>{B(s,o,n,r)}),o}function B(e,r,t,o){e.forEach(i=>{if(typeof i=="string"){const n=i===""?r:re(r,i);n.classGroupId=t;return}if(typeof i=="function"){if(ge(i)){B(i(o),r,t,o);return}r.validators.push({validator:i,classGroupId:t});return}Object.entries(i).forEach(([n,s])=>{B(s,re(r,n),t,o)})})}function re(e,r){let t=e;return r.split(F).forEach(o=>{t.nextPart.has(o)||t.nextPart.set(o,{nextPart:new Map,validators:[]}),t=t.nextPart.get(o)}),t}function ge(e){return e.isThemeGetter}function me(e,r){return r?e.map(([t,o])=>{const i=o.map(n=>typeof n=="string"?r+n:typeof n=="object"?Object.fromEntries(Object.entries(n).map(([s,a])=>[r+s,a])):n);return[t,i]}):e}function he(e){if(e<1)return{get:()=>{},set:()=>{}};let r=0,t=new Map,o=new Map;function i(n,s){t.set(n,s),r++,r>e&&(r=0,o=t,t=new Map)}return{get(n){let s=t.get(n);if(s!==void 0)return s;if((s=o.get(n))!==void 0)return i(n,s),s},set(n,s){t.has(n)?t.set(n,s):i(n,s)}}}const ne="!";function xe(e){const r=e.separator,t=r.length===1,o=r[0],i=r.length;return function(s){const a=[];let u=0,b=0,p;for(let f=0;fb?p-b:void 0;return{modifiers:a,hasImportantModifier:m,baseClassName:x,maybePostfixModifierPosition:A}}}function ye(e){if(e.length<=1)return e;const r=[];let t=[];return e.forEach(o=>{o[0]==="["?(r.push(...t.sort(),o),t=[]):t.push(o)}),r.push(...t.sort()),r}function we(e){return{cache:he(e.cacheSize),splitModifiers:xe(e),...pe(e)}}const ve=/\s+/;function ke(e,r){const{splitModifiers:t,getClassGroupId:o,getConflictingClassGroupIds:i}=r,n=new Set;return e.trim().split(ve).map(s=>{const{modifiers:a,hasImportantModifier:u,baseClassName:b,maybePostfixModifierPosition:p}=t(s);let g=o(p?b.substring(0,p):b),m=!!p;if(!g){if(!p)return{isTailwindClass:!1,originalClassName:s};if(g=o(b),!g)return{isTailwindClass:!1,originalClassName:s};m=!1}const x=ye(a).join(":");return{isTailwindClass:!0,modifierId:u?x+ne:x,classGroupId:g,originalClassName:s,hasPostfixModifier:m}}).reverse().filter(s=>{if(!s.isTailwindClass)return!0;const{modifierId:a,classGroupId:u,hasPostfixModifier:b}=s,p=a+u;return n.has(p)?!1:(n.add(p),i(u,b).forEach(g=>n.add(a+g)),!0)}).reverse().map(s=>s.originalClassName).join(" ")}function Ce(){let e=0,r,t,o="";for(;eg(p),e());return t=we(b),o=t.cache.get,i=t.cache.set,n=a,a(u)}function a(u){const b=o(u);if(b)return b;const p=ke(u,t);return i(u,p),p}return function(){return n(Ce.apply(null,arguments))}}function c(e){const r=t=>t[e]||[];return r.isThemeGetter=!0,r}const ie=/^\[(?:([a-z-]+):)?(.+)\]$/i,Se=/^\d+\/\d+$/,Ae=new Set(["px","full","screen"]),Me=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,Re=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,$e=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,Ge=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,Ie=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/;function w(e){return S(e)||Ae.has(e)||Se.test(e)}function k(e){return M(e,"length",We)}function S(e){return!!e&&!Number.isNaN(Number(e))}function T(e){return M(e,"number",S)}function G(e){return!!e&&Number.isInteger(Number(e))}function Pe(e){return e.endsWith("%")&&S(e.slice(0,-1))}function l(e){return ie.test(e)}function C(e){return Me.test(e)}const _e=new Set(["length","size","percentage"]);function je(e){return M(e,_e,le)}function Te(e){return M(e,"position",le)}const Ee=new Set(["image","url"]);function Le(e){return M(e,Ee,Oe)}function Ne(e){return M(e,"",Ve)}function I(){return!0}function M(e,r,t){const o=ie.exec(e);return o?o[1]?typeof r=="string"?o[1]===r:r.has(o[1]):t(o[2]):!1}function We(e){return Re.test(e)&&!$e.test(e)}function le(){return!1}function Ve(e){return Ge.test(e)}function Oe(e){return Ie.test(e)}function Be(){const e=c("colors"),r=c("spacing"),t=c("blur"),o=c("brightness"),i=c("borderColor"),n=c("borderRadius"),s=c("borderSpacing"),a=c("borderWidth"),u=c("contrast"),b=c("grayscale"),p=c("hueRotate"),g=c("invert"),m=c("gap"),x=c("gradientColorStops"),A=c("gradientColorStopPositions"),f=c("inset"),h=c("margin"),v=c("opacity"),y=c("padding"),q=c("saturate"),E=c("scale"),J=c("sepia"),X=c("skew"),Z=c("space"),H=c("translate"),L=()=>["auto","contain","none"],N=()=>["auto","hidden","clip","visible","scroll"],W=()=>["auto",l,r],d=()=>[l,r],K=()=>["",w,k],P=()=>["auto",S,l],Q=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],_=()=>["solid","dashed","dotted","double","none"],Y=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],V=()=>["start","end","center","between","around","evenly","stretch"],R=()=>["","0",l],D=()=>["auto","avoid","all","avoid-page","page","left","right","column"],$=()=>[S,T],j=()=>[S,l];return{cacheSize:500,separator:":",theme:{colors:[I],spacing:[w,k],blur:["none","",C,l],brightness:$(),borderColor:[e],borderRadius:["none","","full",C,l],borderSpacing:d(),borderWidth:K(),contrast:$(),grayscale:R(),hueRotate:j(),invert:R(),gap:d(),gradientColorStops:[e],gradientColorStopPositions:[Pe,k],inset:W(),margin:W(),opacity:$(),padding:d(),saturate:$(),scale:$(),sepia:R(),skew:j(),space:d(),translate:d()},classGroups:{aspect:[{aspect:["auto","square","video",l]}],container:["container"],columns:[{columns:[C]}],"break-after":[{"break-after":D()}],"break-before":[{"break-before":D()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...Q(),l]}],overflow:[{overflow:N()}],"overflow-x":[{"overflow-x":N()}],"overflow-y":[{"overflow-y":N()}],overscroll:[{overscroll:L()}],"overscroll-x":[{"overscroll-x":L()}],"overscroll-y":[{"overscroll-y":L()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[f]}],"inset-x":[{"inset-x":[f]}],"inset-y":[{"inset-y":[f]}],start:[{start:[f]}],end:[{end:[f]}],top:[{top:[f]}],right:[{right:[f]}],bottom:[{bottom:[f]}],left:[{left:[f]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",G,l]}],basis:[{basis:W()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",l]}],grow:[{grow:R()}],shrink:[{shrink:R()}],order:[{order:["first","last","none",G,l]}],"grid-cols":[{"grid-cols":[I]}],"col-start-end":[{col:["auto",{span:["full",G,l]},l]}],"col-start":[{"col-start":P()}],"col-end":[{"col-end":P()}],"grid-rows":[{"grid-rows":[I]}],"row-start-end":[{row:["auto",{span:[G,l]},l]}],"row-start":[{"row-start":P()}],"row-end":[{"row-end":P()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",l]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",l]}],gap:[{gap:[m]}],"gap-x":[{"gap-x":[m]}],"gap-y":[{"gap-y":[m]}],"justify-content":[{justify:["normal",...V()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...V(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...V(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[y]}],px:[{px:[y]}],py:[{py:[y]}],ps:[{ps:[y]}],pe:[{pe:[y]}],pt:[{pt:[y]}],pr:[{pr:[y]}],pb:[{pb:[y]}],pl:[{pl:[y]}],m:[{m:[h]}],mx:[{mx:[h]}],my:[{my:[h]}],ms:[{ms:[h]}],me:[{me:[h]}],mt:[{mt:[h]}],mr:[{mr:[h]}],mb:[{mb:[h]}],ml:[{ml:[h]}],"space-x":[{"space-x":[Z]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[Z]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",l,r]}],"min-w":[{"min-w":[l,r,"min","max","fit"]}],"max-w":[{"max-w":[l,r,"none","full","min","max","fit","prose",{screen:[C]},C]}],h:[{h:[l,r,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[l,r,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[l,r,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[l,r,"auto","min","max","fit"]}],"font-size":[{text:["base",C,k]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",T]}],"font-family":[{font:[I]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractons"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",l]}],"line-clamp":[{"line-clamp":["none",S,T]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",w,l]}],"list-image":[{"list-image":["none",l]}],"list-style-type":[{list:["none","disc","decimal",l]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[e]}],"placeholder-opacity":[{"placeholder-opacity":[v]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[e]}],"text-opacity":[{"text-opacity":[v]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[..._(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",w,k]}],"underline-offset":[{"underline-offset":["auto",w,l]}],"text-decoration-color":[{decoration:[e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:d()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",l]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",l]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[v]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...Q(),Te]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",je]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},Le]}],"bg-color":[{bg:[e]}],"gradient-from-pos":[{from:[A]}],"gradient-via-pos":[{via:[A]}],"gradient-to-pos":[{to:[A]}],"gradient-from":[{from:[x]}],"gradient-via":[{via:[x]}],"gradient-to":[{to:[x]}],rounded:[{rounded:[n]}],"rounded-s":[{"rounded-s":[n]}],"rounded-e":[{"rounded-e":[n]}],"rounded-t":[{"rounded-t":[n]}],"rounded-r":[{"rounded-r":[n]}],"rounded-b":[{"rounded-b":[n]}],"rounded-l":[{"rounded-l":[n]}],"rounded-ss":[{"rounded-ss":[n]}],"rounded-se":[{"rounded-se":[n]}],"rounded-ee":[{"rounded-ee":[n]}],"rounded-es":[{"rounded-es":[n]}],"rounded-tl":[{"rounded-tl":[n]}],"rounded-tr":[{"rounded-tr":[n]}],"rounded-br":[{"rounded-br":[n]}],"rounded-bl":[{"rounded-bl":[n]}],"border-w":[{border:[a]}],"border-w-x":[{"border-x":[a]}],"border-w-y":[{"border-y":[a]}],"border-w-s":[{"border-s":[a]}],"border-w-e":[{"border-e":[a]}],"border-w-t":[{"border-t":[a]}],"border-w-r":[{"border-r":[a]}],"border-w-b":[{"border-b":[a]}],"border-w-l":[{"border-l":[a]}],"border-opacity":[{"border-opacity":[v]}],"border-style":[{border:[..._(),"hidden"]}],"divide-x":[{"divide-x":[a]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[a]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[v]}],"divide-style":[{divide:_()}],"border-color":[{border:[i]}],"border-color-x":[{"border-x":[i]}],"border-color-y":[{"border-y":[i]}],"border-color-t":[{"border-t":[i]}],"border-color-r":[{"border-r":[i]}],"border-color-b":[{"border-b":[i]}],"border-color-l":[{"border-l":[i]}],"divide-color":[{divide:[i]}],"outline-style":[{outline:["",..._()]}],"outline-offset":[{"outline-offset":[w,l]}],"outline-w":[{outline:[w,k]}],"outline-color":[{outline:[e]}],"ring-w":[{ring:K()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[e]}],"ring-opacity":[{"ring-opacity":[v]}],"ring-offset-w":[{"ring-offset":[w,k]}],"ring-offset-color":[{"ring-offset":[e]}],shadow:[{shadow:["","inner","none",C,Ne]}],"shadow-color":[{shadow:[I]}],opacity:[{opacity:[v]}],"mix-blend":[{"mix-blend":[...Y(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":Y()}],filter:[{filter:["","none"]}],blur:[{blur:[t]}],brightness:[{brightness:[o]}],contrast:[{contrast:[u]}],"drop-shadow":[{"drop-shadow":["","none",C,l]}],grayscale:[{grayscale:[b]}],"hue-rotate":[{"hue-rotate":[p]}],invert:[{invert:[g]}],saturate:[{saturate:[q]}],sepia:[{sepia:[J]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[t]}],"backdrop-brightness":[{"backdrop-brightness":[o]}],"backdrop-contrast":[{"backdrop-contrast":[u]}],"backdrop-grayscale":[{"backdrop-grayscale":[b]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[p]}],"backdrop-invert":[{"backdrop-invert":[g]}],"backdrop-opacity":[{"backdrop-opacity":[v]}],"backdrop-saturate":[{"backdrop-saturate":[q]}],"backdrop-sepia":[{"backdrop-sepia":[J]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[s]}],"border-spacing-x":[{"border-spacing-x":[s]}],"border-spacing-y":[{"border-spacing-y":[s]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",l]}],duration:[{duration:j()}],ease:[{ease:["linear","in","out","in-out",l]}],delay:[{delay:j()}],animate:[{animate:["none","spin","ping","pulse","bounce",l]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[E]}],"scale-x":[{"scale-x":[E]}],"scale-y":[{"scale-y":[E]}],rotate:[{rotate:[G,l]}],"translate-x":[{"translate-x":[H]}],"translate-y":[{"translate-y":[H]}],"skew-x":[{"skew-x":[X]}],"skew-y":[{"skew-y":[X]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",l]}],accent:[{accent:["auto",e]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",l]}],"caret-color":[{caret:[e]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":d()}],"scroll-mx":[{"scroll-mx":d()}],"scroll-my":[{"scroll-my":d()}],"scroll-ms":[{"scroll-ms":d()}],"scroll-me":[{"scroll-me":d()}],"scroll-mt":[{"scroll-mt":d()}],"scroll-mr":[{"scroll-mr":d()}],"scroll-mb":[{"scroll-mb":d()}],"scroll-ml":[{"scroll-ml":d()}],"scroll-p":[{"scroll-p":d()}],"scroll-px":[{"scroll-px":d()}],"scroll-py":[{"scroll-py":d()}],"scroll-ps":[{"scroll-ps":d()}],"scroll-pe":[{"scroll-pe":d()}],"scroll-pt":[{"scroll-pt":d()}],"scroll-pr":[{"scroll-pr":d()}],"scroll-pb":[{"scroll-pb":d()}],"scroll-pl":[{"scroll-pl":d()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",l]}],fill:[{fill:[e,"none"]}],"stroke-w":[{stroke:[w,k,T]}],stroke:[{stroke:[e,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}}const Ue=ze(Be);function He(...e){return Ue(ue(e))}function Fe(e){return Intl.DateTimeFormat("ru-RU",{month:"short",day:"2-digit",year:"numeric"}).format(e)}var qe=U('
    '),Je=U('
    '),Xe=U('
  • ');function Ke({entry:e,pill:r}){return(()=>{var t=O(qe),o=t.firstChild,i=o.firstChild,n=i.firstChild,[s,a]=ae(n.nextSibling),u=s.nextSibling,b=i.nextSibling,p=b.nextSibling,g=p.nextSibling;return z(i,r&&(()=>{var m=O(Je);return z(m,()=>e.collection==="blog"?"post":"project"),m})(),s,a),z(u,()=>Fe(e.data.date)),z(b,()=>e.data.title),z(p,()=>e.data.summary),z(g,()=>e.data.tags.map(m=>(()=>{var x=O(Xe);return z(x,m),x})())),ce(()=>de(t,"href",`/${e.collection}/${e.slug}`)),t})()}export{Ke as A,He as c}; diff --git a/backup/240700/_astro/ArrowCard.E513neQL.js b/backup/240700/_astro/ArrowCard.E513neQL.js new file mode 100644 index 0000000..9644ab2 --- /dev/null +++ b/backup/240700/_astro/ArrowCard.E513neQL.js @@ -0,0 +1 @@ +import{g as O,b as ae,i as z,f as ce,s as de,t as U}from"./web.CIE_19Vj.js";function te(e){var r,t,o="";if(typeof e=="string"||typeof e=="number")o+=e;else if(typeof e=="object")if(Array.isArray(e)){var i=e.length;for(r=0;rs(n))?.classGroupId}const ee=/^\[(.+)\]$/;function be(e){if(ee.test(e)){const r=ee.exec(e)[1],t=r?.substring(0,r.indexOf(":"));if(t)return"arbitrary.."+t}}function fe(e){const{theme:r,prefix:t}=e,o={nextPart:new Map,validators:[]};return me(Object.entries(e.classGroups),t).forEach(([n,s])=>{B(s,o,n,r)}),o}function B(e,r,t,o){e.forEach(i=>{if(typeof i=="string"){const n=i===""?r:re(r,i);n.classGroupId=t;return}if(typeof i=="function"){if(ge(i)){B(i(o),r,t,o);return}r.validators.push({validator:i,classGroupId:t});return}Object.entries(i).forEach(([n,s])=>{B(s,re(r,n),t,o)})})}function re(e,r){let t=e;return r.split(F).forEach(o=>{t.nextPart.has(o)||t.nextPart.set(o,{nextPart:new Map,validators:[]}),t=t.nextPart.get(o)}),t}function ge(e){return e.isThemeGetter}function me(e,r){return r?e.map(([t,o])=>{const i=o.map(n=>typeof n=="string"?r+n:typeof n=="object"?Object.fromEntries(Object.entries(n).map(([s,a])=>[r+s,a])):n);return[t,i]}):e}function he(e){if(e<1)return{get:()=>{},set:()=>{}};let r=0,t=new Map,o=new Map;function i(n,s){t.set(n,s),r++,r>e&&(r=0,o=t,t=new Map)}return{get(n){let s=t.get(n);if(s!==void 0)return s;if((s=o.get(n))!==void 0)return i(n,s),s},set(n,s){t.has(n)?t.set(n,s):i(n,s)}}}const ne="!";function xe(e){const r=e.separator,t=r.length===1,o=r[0],i=r.length;return function(s){const a=[];let u=0,b=0,p;for(let f=0;fb?p-b:void 0;return{modifiers:a,hasImportantModifier:m,baseClassName:x,maybePostfixModifierPosition:A}}}function ye(e){if(e.length<=1)return e;const r=[];let t=[];return e.forEach(o=>{o[0]==="["?(r.push(...t.sort(),o),t=[]):t.push(o)}),r.push(...t.sort()),r}function we(e){return{cache:he(e.cacheSize),splitModifiers:xe(e),...pe(e)}}const ve=/\s+/;function ke(e,r){const{splitModifiers:t,getClassGroupId:o,getConflictingClassGroupIds:i}=r,n=new Set;return e.trim().split(ve).map(s=>{const{modifiers:a,hasImportantModifier:u,baseClassName:b,maybePostfixModifierPosition:p}=t(s);let g=o(p?b.substring(0,p):b),m=!!p;if(!g){if(!p)return{isTailwindClass:!1,originalClassName:s};if(g=o(b),!g)return{isTailwindClass:!1,originalClassName:s};m=!1}const x=ye(a).join(":");return{isTailwindClass:!0,modifierId:u?x+ne:x,classGroupId:g,originalClassName:s,hasPostfixModifier:m}}).reverse().filter(s=>{if(!s.isTailwindClass)return!0;const{modifierId:a,classGroupId:u,hasPostfixModifier:b}=s,p=a+u;return n.has(p)?!1:(n.add(p),i(u,b).forEach(g=>n.add(a+g)),!0)}).reverse().map(s=>s.originalClassName).join(" ")}function Ce(){let e=0,r,t,o="";for(;eg(p),e());return t=we(b),o=t.cache.get,i=t.cache.set,n=a,a(u)}function a(u){const b=o(u);if(b)return b;const p=ke(u,t);return i(u,p),p}return function(){return n(Ce.apply(null,arguments))}}function c(e){const r=t=>t[e]||[];return r.isThemeGetter=!0,r}const ie=/^\[(?:([a-z-]+):)?(.+)\]$/i,Se=/^\d+\/\d+$/,Ae=new Set(["px","full","screen"]),Me=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,Re=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,$e=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,Ge=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,Ie=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/;function w(e){return S(e)||Ae.has(e)||Se.test(e)}function k(e){return M(e,"length",We)}function S(e){return!!e&&!Number.isNaN(Number(e))}function T(e){return M(e,"number",S)}function G(e){return!!e&&Number.isInteger(Number(e))}function Pe(e){return e.endsWith("%")&&S(e.slice(0,-1))}function l(e){return ie.test(e)}function C(e){return Me.test(e)}const _e=new Set(["length","size","percentage"]);function je(e){return M(e,_e,le)}function Te(e){return M(e,"position",le)}const Ee=new Set(["image","url"]);function Le(e){return M(e,Ee,Oe)}function Ne(e){return M(e,"",Ve)}function I(){return!0}function M(e,r,t){const o=ie.exec(e);return o?o[1]?typeof r=="string"?o[1]===r:r.has(o[1]):t(o[2]):!1}function We(e){return Re.test(e)&&!$e.test(e)}function le(){return!1}function Ve(e){return Ge.test(e)}function Oe(e){return Ie.test(e)}function Be(){const e=c("colors"),r=c("spacing"),t=c("blur"),o=c("brightness"),i=c("borderColor"),n=c("borderRadius"),s=c("borderSpacing"),a=c("borderWidth"),u=c("contrast"),b=c("grayscale"),p=c("hueRotate"),g=c("invert"),m=c("gap"),x=c("gradientColorStops"),A=c("gradientColorStopPositions"),f=c("inset"),h=c("margin"),v=c("opacity"),y=c("padding"),q=c("saturate"),E=c("scale"),J=c("sepia"),X=c("skew"),Z=c("space"),H=c("translate"),L=()=>["auto","contain","none"],N=()=>["auto","hidden","clip","visible","scroll"],W=()=>["auto",l,r],d=()=>[l,r],K=()=>["",w,k],P=()=>["auto",S,l],Q=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],_=()=>["solid","dashed","dotted","double","none"],Y=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],V=()=>["start","end","center","between","around","evenly","stretch"],R=()=>["","0",l],D=()=>["auto","avoid","all","avoid-page","page","left","right","column"],$=()=>[S,T],j=()=>[S,l];return{cacheSize:500,separator:":",theme:{colors:[I],spacing:[w,k],blur:["none","",C,l],brightness:$(),borderColor:[e],borderRadius:["none","","full",C,l],borderSpacing:d(),borderWidth:K(),contrast:$(),grayscale:R(),hueRotate:j(),invert:R(),gap:d(),gradientColorStops:[e],gradientColorStopPositions:[Pe,k],inset:W(),margin:W(),opacity:$(),padding:d(),saturate:$(),scale:$(),sepia:R(),skew:j(),space:d(),translate:d()},classGroups:{aspect:[{aspect:["auto","square","video",l]}],container:["container"],columns:[{columns:[C]}],"break-after":[{"break-after":D()}],"break-before":[{"break-before":D()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...Q(),l]}],overflow:[{overflow:N()}],"overflow-x":[{"overflow-x":N()}],"overflow-y":[{"overflow-y":N()}],overscroll:[{overscroll:L()}],"overscroll-x":[{"overscroll-x":L()}],"overscroll-y":[{"overscroll-y":L()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[f]}],"inset-x":[{"inset-x":[f]}],"inset-y":[{"inset-y":[f]}],start:[{start:[f]}],end:[{end:[f]}],top:[{top:[f]}],right:[{right:[f]}],bottom:[{bottom:[f]}],left:[{left:[f]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",G,l]}],basis:[{basis:W()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",l]}],grow:[{grow:R()}],shrink:[{shrink:R()}],order:[{order:["first","last","none",G,l]}],"grid-cols":[{"grid-cols":[I]}],"col-start-end":[{col:["auto",{span:["full",G,l]},l]}],"col-start":[{"col-start":P()}],"col-end":[{"col-end":P()}],"grid-rows":[{"grid-rows":[I]}],"row-start-end":[{row:["auto",{span:[G,l]},l]}],"row-start":[{"row-start":P()}],"row-end":[{"row-end":P()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",l]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",l]}],gap:[{gap:[m]}],"gap-x":[{"gap-x":[m]}],"gap-y":[{"gap-y":[m]}],"justify-content":[{justify:["normal",...V()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...V(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...V(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[y]}],px:[{px:[y]}],py:[{py:[y]}],ps:[{ps:[y]}],pe:[{pe:[y]}],pt:[{pt:[y]}],pr:[{pr:[y]}],pb:[{pb:[y]}],pl:[{pl:[y]}],m:[{m:[h]}],mx:[{mx:[h]}],my:[{my:[h]}],ms:[{ms:[h]}],me:[{me:[h]}],mt:[{mt:[h]}],mr:[{mr:[h]}],mb:[{mb:[h]}],ml:[{ml:[h]}],"space-x":[{"space-x":[Z]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[Z]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",l,r]}],"min-w":[{"min-w":[l,r,"min","max","fit"]}],"max-w":[{"max-w":[l,r,"none","full","min","max","fit","prose",{screen:[C]},C]}],h:[{h:[l,r,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[l,r,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[l,r,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[l,r,"auto","min","max","fit"]}],"font-size":[{text:["base",C,k]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",T]}],"font-family":[{font:[I]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractons"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",l]}],"line-clamp":[{"line-clamp":["none",S,T]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",w,l]}],"list-image":[{"list-image":["none",l]}],"list-style-type":[{list:["none","disc","decimal",l]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[e]}],"placeholder-opacity":[{"placeholder-opacity":[v]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[e]}],"text-opacity":[{"text-opacity":[v]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[..._(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",w,k]}],"underline-offset":[{"underline-offset":["auto",w,l]}],"text-decoration-color":[{decoration:[e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:d()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",l]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",l]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[v]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...Q(),Te]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",je]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},Le]}],"bg-color":[{bg:[e]}],"gradient-from-pos":[{from:[A]}],"gradient-via-pos":[{via:[A]}],"gradient-to-pos":[{to:[A]}],"gradient-from":[{from:[x]}],"gradient-via":[{via:[x]}],"gradient-to":[{to:[x]}],rounded:[{rounded:[n]}],"rounded-s":[{"rounded-s":[n]}],"rounded-e":[{"rounded-e":[n]}],"rounded-t":[{"rounded-t":[n]}],"rounded-r":[{"rounded-r":[n]}],"rounded-b":[{"rounded-b":[n]}],"rounded-l":[{"rounded-l":[n]}],"rounded-ss":[{"rounded-ss":[n]}],"rounded-se":[{"rounded-se":[n]}],"rounded-ee":[{"rounded-ee":[n]}],"rounded-es":[{"rounded-es":[n]}],"rounded-tl":[{"rounded-tl":[n]}],"rounded-tr":[{"rounded-tr":[n]}],"rounded-br":[{"rounded-br":[n]}],"rounded-bl":[{"rounded-bl":[n]}],"border-w":[{border:[a]}],"border-w-x":[{"border-x":[a]}],"border-w-y":[{"border-y":[a]}],"border-w-s":[{"border-s":[a]}],"border-w-e":[{"border-e":[a]}],"border-w-t":[{"border-t":[a]}],"border-w-r":[{"border-r":[a]}],"border-w-b":[{"border-b":[a]}],"border-w-l":[{"border-l":[a]}],"border-opacity":[{"border-opacity":[v]}],"border-style":[{border:[..._(),"hidden"]}],"divide-x":[{"divide-x":[a]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[a]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[v]}],"divide-style":[{divide:_()}],"border-color":[{border:[i]}],"border-color-x":[{"border-x":[i]}],"border-color-y":[{"border-y":[i]}],"border-color-t":[{"border-t":[i]}],"border-color-r":[{"border-r":[i]}],"border-color-b":[{"border-b":[i]}],"border-color-l":[{"border-l":[i]}],"divide-color":[{divide:[i]}],"outline-style":[{outline:["",..._()]}],"outline-offset":[{"outline-offset":[w,l]}],"outline-w":[{outline:[w,k]}],"outline-color":[{outline:[e]}],"ring-w":[{ring:K()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[e]}],"ring-opacity":[{"ring-opacity":[v]}],"ring-offset-w":[{"ring-offset":[w,k]}],"ring-offset-color":[{"ring-offset":[e]}],shadow:[{shadow:["","inner","none",C,Ne]}],"shadow-color":[{shadow:[I]}],opacity:[{opacity:[v]}],"mix-blend":[{"mix-blend":[...Y(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":Y()}],filter:[{filter:["","none"]}],blur:[{blur:[t]}],brightness:[{brightness:[o]}],contrast:[{contrast:[u]}],"drop-shadow":[{"drop-shadow":["","none",C,l]}],grayscale:[{grayscale:[b]}],"hue-rotate":[{"hue-rotate":[p]}],invert:[{invert:[g]}],saturate:[{saturate:[q]}],sepia:[{sepia:[J]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[t]}],"backdrop-brightness":[{"backdrop-brightness":[o]}],"backdrop-contrast":[{"backdrop-contrast":[u]}],"backdrop-grayscale":[{"backdrop-grayscale":[b]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[p]}],"backdrop-invert":[{"backdrop-invert":[g]}],"backdrop-opacity":[{"backdrop-opacity":[v]}],"backdrop-saturate":[{"backdrop-saturate":[q]}],"backdrop-sepia":[{"backdrop-sepia":[J]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[s]}],"border-spacing-x":[{"border-spacing-x":[s]}],"border-spacing-y":[{"border-spacing-y":[s]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",l]}],duration:[{duration:j()}],ease:[{ease:["linear","in","out","in-out",l]}],delay:[{delay:j()}],animate:[{animate:["none","spin","ping","pulse","bounce",l]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[E]}],"scale-x":[{"scale-x":[E]}],"scale-y":[{"scale-y":[E]}],rotate:[{rotate:[G,l]}],"translate-x":[{"translate-x":[H]}],"translate-y":[{"translate-y":[H]}],"skew-x":[{"skew-x":[X]}],"skew-y":[{"skew-y":[X]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",l]}],accent:[{accent:["auto",e]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",l]}],"caret-color":[{caret:[e]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":d()}],"scroll-mx":[{"scroll-mx":d()}],"scroll-my":[{"scroll-my":d()}],"scroll-ms":[{"scroll-ms":d()}],"scroll-me":[{"scroll-me":d()}],"scroll-mt":[{"scroll-mt":d()}],"scroll-mr":[{"scroll-mr":d()}],"scroll-mb":[{"scroll-mb":d()}],"scroll-ml":[{"scroll-ml":d()}],"scroll-p":[{"scroll-p":d()}],"scroll-px":[{"scroll-px":d()}],"scroll-py":[{"scroll-py":d()}],"scroll-ps":[{"scroll-ps":d()}],"scroll-pe":[{"scroll-pe":d()}],"scroll-pt":[{"scroll-pt":d()}],"scroll-pr":[{"scroll-pr":d()}],"scroll-pb":[{"scroll-pb":d()}],"scroll-pl":[{"scroll-pl":d()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",l]}],fill:[{fill:[e,"none"]}],"stroke-w":[{stroke:[w,k,T]}],stroke:[{stroke:[e,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}}const Ue=ze(Be);function He(...e){return Ue(ue(e))}function Fe(e){return Intl.DateTimeFormat("en-US",{month:"short",day:"2-digit",year:"numeric"}).format(e)}var qe=U('
      '),Je=U('
      '),Xe=U('
    • ');function Ke({entry:e,pill:r}){return(()=>{var t=O(qe),o=t.firstChild,i=o.firstChild,n=i.firstChild,[s,a]=ae(n.nextSibling),u=s.nextSibling,b=i.nextSibling,p=b.nextSibling,g=p.nextSibling;return z(i,r&&(()=>{var m=O(Je);return z(m,()=>e.collection==="blog"?"post":"project"),m})(),s,a),z(u,()=>Fe(e.data.date)),z(b,()=>e.data.title),z(p,()=>e.data.summary),z(g,()=>e.data.tags.map(m=>(()=>{var x=O(Xe);return z(x,m),x})())),ce(()=>de(t,"href",`/${e.collection}/${e.slug}`)),t})()}export{Ke as A,He as c}; diff --git a/backup/240700/_astro/Blog.B4uIamCS.js b/backup/240700/_astro/Blog.B4uIamCS.js new file mode 100644 index 0000000..4bb4ea3 --- /dev/null +++ b/backup/240700/_astro/Blog.B4uIamCS.js @@ -0,0 +1 @@ +import{d as J,c as C,a as K,g as h,b as v,i as t,e as y,t as b,f as Q,h as U,s as g,r as V,F as X}from"./web.CIE_19Vj.js";import{c as d,A as Y}from"./ArrowCard.CnJHY5Ig.js";var Z=b('
      Filter
        SHOWING OF POSTS
        +Вернуться в blog
        23 мая 2024 г.
        2 min read

        Драйвера Amentmen X99-A4 + обновление до Windows 11

        Техподдержка через WhatsApp предоставила драйверы для аудио и сетевой карты, которые были автоматически обновлены с Microsoft, а драйвер для чипсета загружен с официального сайта Intel.

        Есть много способов установить и обновить Windows 11 на материнской плате Amentmen X99-A4, даже если она не поддерживается. Ниже приведен пример одного из способов:

        +
          +
        1. +

          Перейдите на официальный сайт и скачайте MediaCreationTool_Win11_23H2 (https://go.microsoft.com/fwlink/?linkid=2156295). Установите программу, загрузите образ и сохраните его в файл формата .iso.

          +
        2. +
        3. +

          Скачайте архив с GitHub по ссылке https://github.com/AveYo/MediaCreationTool.bat и распакуйте. Перейдите в папку bypass11 и запустите файл Skip_TPM_Check_on_Dynamic_Update.cmd от имени администратора. Дождитесь завершения процесса.

          +
        4. +
        5. +

          Затем монтируйте скачанный образ Windows 11 (щелкните правой кнопкой мыши => Монтировать), затем откройте “Этот компьютер” => “Смонтированный образ” => setup.exe и выполните обновление системы.

          +
        6. +
        +

        Ссылки на архивы с драйверами:

        +
        \ No newline at end of file diff --git a/backup/240700/blog/02-kms-service/index.html b/backup/240700/blog/02-kms-service/index.html new file mode 100644 index 0000000..182e788 --- /dev/null +++ b/backup/240700/blog/02-kms-service/index.html @@ -0,0 +1,239 @@ + Активация Windows в организации через KMS server | Плата Управления РФ
        +Вернуться в blog
        11 июн. 2024 г.
        5 min read

        Активация Windows в организации через KMS server

        Небольшой гайд об активации операционной windows 7/8/10/11 server без установки crack и отключения антивируса.
        +

        Дисклаймер. Данная статья предоставляется в образовательных целях и не предполагает использование рассмотренного продукта для незаконной активации Windows или Office. Мы не поддерживает использование нелицензионного ПО ни в каком виде.

        +
        +

        В данной статье будет описан процесс настройки сервера активации продуктов Microsoft в небольшой корпоративной сети с использованием дистрибутива от @Wind4, доступного на GitHub по ссылке https://github.com/Wind4/vlmcsd. Для этого потребуется операционная система Debian/Ubuntu, CentOS/Fedora или любая другая по вашему усмотрению, включая даже BusyBox, если вы имеете достаточные навыки для работы с ним.

        +

        Установка

        +

        Система требований

        + + + + + + + + + + + + + + + + + +
        Процессор1 ядро / > 2 Ггц
        Озу> 1Гб
        +

        Этого достаточно для создания только KMS-сервера, но ничто не мешает использовать этот сервер для размещения ботов и других полезных инструментов, не забудьте увеличить мощность по потребности.

        +
          +
        • Далее все делаем из под root прав.
        • +
        +

        Шаг первый, подготовка

        +

        CentOS\Fedora\RHEL

        +
        dnf update
        +dnf install git gcc make netstat 
        +
        +

        debian\Ubuntu

        +
        apt update
        +apt install git gcc make netstat
        +
        +

        Установки сетевого экрана (firewall)

        +
        apt install iptables
        +
        +

        или

        +
        apt install firewalld
        +
        +

        смотря кому что нравиться, можно и без него.

        +

        Шаг второй

        +
        git clone https://github.com/Wind4/vlmcsd
        +cd vlmcsd
        +make
        +cd bin
        +./vlmcsd
        +
        +

        Далее наблюдаем ответ сервера

        +
        +

        Connecting to 127.0.0.1:1688 … successful +Sending activation request (KMS V6) 1 of 1 -> 55041-00206-559-475403-03-1076-6002.0000-1482020 (3A1C049600B60076)

        +
        +

        По умолчанию vlmcsd слушает на стандартном порту KMS — TCP/1688.

        +

        Шаг третий firewall

        +

        Если вы не хотите затруднять себя настройкой firewalld\iptables, можно пропустить этот шаг. Однако, если вам необходимо разрешить подключения клиентов к серверу через firewalld\iptables, вам нужно выполнить следующие команды:

        +

        firewall-cmd

        +
        firewall-cmd --list-port
        +firewall-cmd --zone=public --add-port=1688/tcp
        +firewall-cmd --reload
        +netstat -ntlp | grep LISTEN
        +
        +

        iptables

        +
        iptables -A INPUT -p tcp --dport 1688 -j ACCEPT
        +service iptables save
        +service iptables restart
        +netstat -ntlp | grep LISTEN
        +
        +

        Шаг четвертый Автозапуск демона

        +

        Делаем автоматический старт при запуске сервера

        +
        cp vlmcsd /usr/bin
        +cp vlmcs /usr/bin
        +touch /etc/systemd/system/kms-autostart.service
        +chmod 664 /etc/systemd/system/kms-autostart.service
        +nano /etc/systemd/system/kms-autostart.service
        +
        +

        Добавляем в файл следущие параметры

        +
        [Unit]
        +Description=Microsoft KMS Server
        +After=network.target
        +After=network-online.target
        +Wants=network-online.target
        + 
        +[Service]
        +Type=oneshot
        +ExecStart=/usr/bin/vlmcsd
        +RemainAfterExit=yes
        +LimitNOFILE=65536
        + 
        +[Install]
        +WantedBy=multi-user.target
        +
        +

        Выпускаем демона

        +
        systemctl daemon-reload
        +systemctl start kms-autostart.service
        +systemctl status kms-autostart.service
        +systemctl enable kms-autostart.service
        +
        +

        Шаг пятый, запись на DNS сервер в доменной сети

        +

        Команада для PowerShell

        +
        Add-DnsServerResourceRecord -Srv -Name "_VLMCS._tcp" -ZoneName "fipi.pro" -DomainName "192.168.0.2" -Priority 0 -Weight 0 -Port 1688
        +
        +

        Редактируйте под себя.

        +
          +
        • ZoneName “fipi.pro” – Зона в вашей доменной сети.
        • +
        • 192.168.0.2 – IP адрес вашего Linux сервера со службой KMS.
        • +
        +

        Теперь все хосты Windows (и Office) в домене будут автоматически активироваться на KMS сервере, если на них установлен публичный ключ корпоративной активации (GVLK).

        +

        Вот краткий список часто исполбзуюмых ключей.

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Operating system editionKMS Client Product Key
        Windows Server 2022 StandardVDYBN-27WPP-V4HQT-9VMD4-VMK7H
        Windows Server 2022 DatacenterWX4NM-KYWYW-QJJR4-XV3QB-6VM33
        Windows 11 \ 10 ProW269N-WFGWX-YVC9B-4J6C9-T83GX
        Windows 8.1 ProGCRJD-8NW9H-F2CDX-CCM8D-9D6T9
        Windows 7 ProfessionalFJ82H-XT6CR-J8D7P-XQJJ2-GPDD4
        +

        В для остальных версий ключи подбирайте здесь:

        +
        +

        https://docs.microsoft.com/en-us/windows-server/get-started/kms-client-activation-keys

        +
        +

        Шаг активации клинтов

        +

        Для ручной активации Windows нужно задать GVLK ключ для вашей версии Windows, адрес сервера KMS активации и выполнить команду активации. Используются следующие команды (например, для Windows Server 2022 Std):

        +

        Команада для PowerShell от прав Администратора

        +
        slmgr.vbs -ipk VDYBN-27WPP-V4HQT-9VMD4-VMK7H
        +slmgr.vbs -skms 192.168.0.2
        +slmgr.vbs -ato
        +
        +

        Для Активации Microsoft Office 2021/2019

        +
        cd C:\Program Files\Microsoft Office\Office16
        +cscript ospp.vbs /sethst: 192.168.0.2
        +cscript ospp.vbs /act
        +
        +

        В некоторых версия windows команда будет такая

        +
        cd 'C:\Program Files\Microsoft Office\Office16\'
        +cscript ospp.vbs /sethst: 192.168.0.2
        +cscript ospp.vbs /act
        +
        +

        Для Активации Microsoft Office 2016

        +
        cd C:\Program Files\Microsoft Office\Office15
        +cscript ospp.vbs /sethst: 192.168.0.2
        +cscript ospp.vbs /act
        +
        +

        Шаг активации Windows server 2022

        +

        Качаем оригинальную версию Winodws Server 2022

        +
        +

        https://www.microsoft.com/ru-ru/evalcenter/evaluate-windows-server-2022

        +
        +

        И до ввода ключа активации получаем ServerStandardEval

        +

        Проверяем возможные версии для обновления:

        +
        DISM /online /Get-TargetEditions
        +
        +

        В данном случае мы хотим выполнить апгрейд Eval редакции до Retail версии Windows Server 2022 Standard. Найдите и скопируйте GVLK ключ для этой версии и редакции Windows Server из таблицы и выполните команду:

        +
        dism /online /set-edition:ServerStandard /productkey:xxxxx-xxxxx-xxxxx-xxxxx-xxxxx /accepteula
        +
        +

        Перезагружаемся и деалем активацию как было описанно выше.

        +
        slmgr /skms 192.168.0.2:1688
        +slmgr /ato
        +
        +

        Вдруг пригодиться

        +

        Удалите текущий GVLK ключ:

        +
        slmgr.vbs /upk
        +slmgr.vbs /cpky
        +
        +

        Проверьте, что Windows активирована:

        +
        Get-CimInstance SoftwareLicensingProduct -Filter "Name like 'Windows%'" | where { $_.PartialProductKey } | select Description, LicenseStatus
        +
        \ No newline at end of file diff --git a/backup/240700/blog/03-bot-support/index.html b/backup/240700/blog/03-bot-support/index.html new file mode 100644 index 0000000..fba3034 --- /dev/null +++ b/backup/240700/blog/03-bot-support/index.html @@ -0,0 +1,267 @@ + Хватит терять заявки пользователей | Плата Управления РФ
        +Вернуться в blog
        12 июн. 2024 г.
        6 min read

        Хватит терять заявки пользователей

        Пора сделать бота для принятия заявок от пользователей всем IT отделом.

        Бот техподдержки пользователя

        +

        https://git.fipi.pro/Plata_Upravleniya_RF/Support-BOT

        +

        Пользователи пишут свои вопросы боту компании, бот пересылает эти сообщения в чат поддержки, сотрудники поддержки отвечают на эти сообщения через reply. Основной плюс - анонимизация сотрудников поддержки.

        +

        Бот работает в режиме webhook, но может работать и в режиме polling.

        +

        Для обхода запрета на пересылку сообщений у пользователя, бот копирует содержимое и уже затем отправляет его в чат поддержки.

        +

        По умолчанию бот отправляет сообщения в один чат поддержки с id, указанным в переменных окружения .env.

        +

        Бот умеет

        +
          +
        • Пересылать сообщения, документы, аудио и видео от пользователя в группу к администраторам и обратно
        • +
        • Выдавать информацию о пользователе из Telegram
        • +
        • Выдавать месячный отчет и отчет за указанный интервал дат по количеству обращений и общему числу сообщений и ответов
        • +
        • Банить и разбанивать пользователей
        • +
        +

        Типы контента, которые может пересылать бот

        +
          +
        • Текстовые сообщения
        • +
        • Фотографии
        • +
        • Группы фотографий (пересылаются по одной)
        • +
        • Видео
        • +
        • Аудиозаписи
        • +
        • Файлы
        • +
        +

        Разворачивание образа на личном или vps сервере

        +

        Настройка Nignx

        +

        Предполагается, что у вас есть готовый настроенный VPS сервер с установленным nginx.

        +
          +
        1. Перейти в каталог nginx sites-available:
        2. +
        +
        cd /etc/nginx/sites-available/
        +
        +
          +
        1. Создайте файл с именем вашего домена:
        2. +
        +
        nano domain.example.com
        +
        +
          +
        1. Внутри файла напишите:
        2. +
        +
        server {
        +    listen 80;
        +
        +    server_name domain.example.com;
        +
        +    location /telegram/ {
        +        proxy_set_header Host $http_host;
        +        proxy_set_header X-Real-IP $remote_addr;
        +        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        +        proxy_set_header X-Forwarded-Proto $scheme;
        +        proxy_pass http://127.0.0.1:7772;
        +    }
        +}
        +
        +

        server_name - ваш домен с подключенным SSL сертификатом (например, Let’s Encrypt). Вместо /telegram/ можно написать любой путь, на который должны приниматься данные. Этот же путь нужно указать в .env файле.

        +
          +
        1. Создайте символическую ссылку в каталоге sites-enabled
        2. +
        +
        sudo ln -s /etc/nginx/sites-available/domain.example.com /etc/nginx/sites-enabled/
        +
        +
          +
        1. Проверьте конфигурацию nginx на ошибки:
        2. +
        +
        sudo nginx -t
        +
        +
          +
        1. Перезапустить службу nginx:
        2. +
        +
        sudo systemctl restart nginx
        +
        +
          +
        1. Установить certbot:
        2. +
        +
        sudo apt install -y certbot python3-certbot-nginx
        +
        +
          +
        1. Установите HTTPS соединение, выпустив SSL сертификат с помощью certbot для вашего домена:
        2. +
        +
        sudo certbot --nginx 
        +
        +
          +
        1. Добавить автоматическое обновление сертификата:
        2. +
        +
        sudo certbot renew --dry-run
        +
        +

        Можно на всякий случай еще раз перезапустить nginx.

        +

        Запуск бота

        +
          +
        1. Создайте бота через BotFather (см. ниже), добавьте бота в группу с сотрудниками поддержки, дайте боту права администратора, узнайте id группы (см. ниже).
        2. +
        3. Скопируйте этот репозиторий на сервер любым удобным способом.
        4. +
        5. Создайте .env файл в корне со следующим содержанием:
        6. +
        +
        TELEGRAM_TOKEN=<телеграм_токен_вашего_бота>
        +GROUP_ID=<id_группы_или_супергруппы_в_телеграме>
        +WEBHOOK_DOMAIN=domain.example.com
        +WEBHOOK_PATH=/telegram/
        +APP_HOST=0.0.0.0
        +APP_PORT=7772
        +DATABASE_URL=postgresql+asyncpg://<postgres_user>:<postgres_password>@<postgres_container_name>:5432/support_bot_db
        +DB_HOST=<имя_контейнера_с_БД>
        +DB_PORT=5432
        +POSTGRES_USER=<postgres_user>
        +POSTGRES_PASSWORD=<postgres_password>
        +START_MESSAGE=<Приветственное сообщение бота, когда клиент нажимает кнопку start>
        +
        +

        В качестве теста логин пользователя БД, пароль и название БД можно указать postgres. Только для теста, не для продакшена!

        +
          +
        1. Запустить сборку docker-образа и его запуск из файла docker-compose:
        2. +
        +
        sudo docker-compose up -d --build
        +
        +

        Ключ -d для того чтобы контейнер запустился в фоне.

        +
          +
        1. Зайдите в контейнер с базой данных, создайте базу данных, выдайте права на нее пользователю (в данном случае postgres):
        2. +
        +
        docker exec -it support-bot-db psql -U postgres
        +\l #убеждаемся, что базы данных нет
        +create database support_bot_db;
        +grant all privileges on database support_bot_db to postgres;
        +\q #выходим из psql
        +
        +
          +
        1. Применить миграции:
        2. +
        +
        docker exec -it support-bot alembic upgrade head
        +
        +

        Где что брать

        +
          +
        1. WEBHOOK_DOMAIN - домен с подключенным ssl сертификатом
        2. +
        3. WEBHOOK_PATH - URL путь после домена. В данном случае WEBHOOK_DOMAIN + WEBHOOK_PATH будет domain.example.com/telegram/.
        4. +
        5. Token получаем при создании бота через BotFather BotFather.
        6. +
        7. Свой личный id или id группы можно узнать через бота myidbot. Узнать свой id - написать боту в личку, узнать id группы - добавить бота в чат группы (например группы поддержки), затем ввести команду /getgroupid.
        8. +
        9. APP_HOST - IP, на котором будет работать приложение (по умолчанию на хосте 127.0.0.1, localhost или можно указать 0.0.0.0).
        10. +
        11. APP_PORT - порт, который приложение будет использовать. Порт должен быть уникальным и не дублировать порты других приложений, работающих на сервере или в Docker.
        12. +
        +

        Запуск в режиме polling (на локальном компьютере)

        +
          +
        1. Скопируйте репозиторий на локальный компьютер.
        2. +
        3. Создайте файл .env (см. выше).
        4. +
        5. В файле .env удалить (закомментировать) WEBHOOK_DOMAIN. Пропишите свои переменные окружения. Так же пропишите переменные окружения в файле docker-compose-postgres-localhost.yaml
        6. +
        7. Установить виртуальное окружение, активировать его, +установить зависимости из requirements.txt:
        8. +
        +
        python -m venv venv
        +pip install -r requirements.txt
        +
        +
          +
        1. В докере запустить контейнер с базой данных из файла docker-compose-postgres-localhost.yaml:
        2. +
        +
        docker-compose -f docker-compose-postgres-localhost up -d
        +
        +
          +
        1. Применить миграцию.
        2. +
        +
        alembic upgrade head
        +
        +
          +
        1. Если alembic ругается, что базы данных не существует, создайте ее вручную и выйдите из psql. Затем попробуйте выполнить миграцию повторно:
        2. +
        +
        docker exec -it postgres psql -U postgres
        +# далее в psql
        +create database support_bot_db;
        +grant all privileges on database support_bot_db to postgres;
        +
        +
          +
        1. Запустить main.py:
        2. +
        +
        python main.py
        +
        +

        Для запуска необходим python 3.9 или выше.

        +

        Команды бота

        +

        В чате поддержки доступны следующие команды:

        +

        /info - Команда вводится через reply на вопрос пользователя и выдает информацию о нем (имя, фамилия, id, никнейм, а также количество сообщений от пользователя и ответов пользователю. Последние два берутся из созданной базы данных).

        +

        /report - Отчет по количеству клиентов за месяц, сообщений от них и количество ответов администраторов.

        +

        /report 01.01.2020 15.06.2024 - Отчет за выбранный период. Две любые даты через пробел, по шаблону.

        +

        /ban - Команда вводится через reply на вопрос пользователя. Банит пользователя. Сообщения от него будут игнорироваться ботом. +/unban - Команда вводится через reply на вопрос пользователя. Разбанивает пользователя.

        +

        /banlist - Список забаненных пользователей. Выводит список пользователей в формате id - имя_фамилия.

        +

        /registeradmin - Регистрирует нового администратора в чате поддержки. Также администратор регистрируется автоматически, если ответит на сообщение клиента через reply. Это сделано на случай, если забыли зарегистрировать администратора, а он уже отвечает на сообщения.

        +

        /deleteadmin - Удаляет права администратора у пользователя в чате поддержки. После удаления прав администратора нужно вручную удалить пользователя из группы Telegram.

        +

        Автозапуск бота

        +
          +
        1. Создание службы: +Создайте файл службы для вашего бота, например my_bot.service:
        2. +
        +
        sudo nano /etc/systemd/system/my_bot.service
        +
        +
          +
        1. Редактирование службы: +Внесите следующие настройки в файл службы:
        2. +
        +
        [Unit]
        +Description=My Python Telegram Bot
        +After=network.target
        +
        +[Service]
        +User=your_username
        +Group=your_groupname
        +WorkingDirectory=/path/to/your/bot
        +ExecStart=/path/to/your/python /path/to/your/bot/main.py
        +Restart=always
        +
        +[Install]
        +WantedBy=multi-user.target
        +
        +

        Замените your_username, your_groupname, /path/to/your/bot, и /path/to/your/python на соответствующие значения для вашей среды. Убедитесь, что ExecStart указывает на правильный путь к вашему скрипту Python бота.

        +
          +
        1. Перезагрузка systemd: +После того как вы сохранили изменения, перезагрузите systemd для применения новой службы:
        2. +
        +
        sudo systemctl daemon-reload
        +
        +
          +
        1. Управление службой: +Теперь вы можете управлять вашим ботом как службой. Например, чтобы запустить его и настроить автозапуск при загрузке системы, выполните следующие команды:
        2. +
        +
        sudo systemctl start my_bot
        +sudo systemctl enable my_bot
        +
        +

        Чтобы проверить статус вашей службы, выполните:

        +
        sudo systemctl status my_bot
        +
        \ No newline at end of file diff --git a/backup/240700/blog/04-office-2021/index.html b/backup/240700/blog/04-office-2021/index.html new file mode 100644 index 0000000..ee9446c --- /dev/null +++ b/backup/240700/blog/04-office-2021/index.html @@ -0,0 +1,112 @@ + Установливаем последний Microsoft Office с официального сайта. | Плата Управления РФ
        +Вернуться в blog
        13 июн. 2024 г.
        3 min read

        Установливаем последний Microsoft Office с официального сайта.

        Инструкция по установке последней версии Microsoft Office с официального сайта. В статье описаны шаги загрузки установочного файла, процесс установки и активации Office, а также советы по устранению возможных проблем.
        +

        Дисклаймер. Данная статья предоставляется в образовательных целях и не предполагает использование рассмотренного продукта для незаконной активации Windows или Office. Мы не поддерживает использование нелицензионного ПО ни в каком виде.

        +
        +

        Качаем

        +

        Скачайте Microsoft Office Deployment Tool

        +
        +

        https://www.microsoft.com/en-us/download/details.aspx?id=49117

        +
        +

        Запускаем файл officedeploymenttool_17531-20046.exe и распакуйте содержимое Office Click-to-Run Administrator Tool в локальный каталог на компьютере.

        +

        В каталоге установки находятся четыре XML файла с образцами конфигурации: configuration-Office365-x64.xml, configuration-Office365-x86.xml, configuration-Office2021Enterprise.xml и configuration-Office2021Enterprise.xml. Программа setup.exe используется для загрузки дистрибутива и установки пакета Office на клиенте.

        +

        Пример конфигурационного файла *.xml:

        +
        <Configuration>
        +	<Add OfficeClientEdition="64" Channel="PerpetualVL2021">
        +		<Product ID="ProPlus2021Volume">
        +			<Language ID="en-us" />
        +		</Product>
        +		<Product ID="VisioPro2021Volume">
        +			<Language ID="en-us" />
        +		</Product>
        +		<Product ID="ProjectPro2021Volume">
        +			<Language ID="en-us" />
        +		</Product>
        +	</Add>
        +	<!-- <RemoveMSI All="True" /> -->
        +	<!-- <Display Level="None" AcceptEULA="TRUE" /> -->
        +	<!-- <Property Name="AUTOACTIVATE" Value="1" /> -->
        +</Configuration>
        +
        +

        Рассмотрим основные параметры:

        +
          +
        • OfficeClientEdition="64" – установка 64-битной версии Office 2021;;
        • +
        • Channel="PerpetualVL2021" – установка Office 2021 по системе корпоративного лицензирования (Volume License);
        • +
        • <Language ID="en-us" /> — установка английской версии Office. Для русской версии укажите ru-ru;
        • +
        • <!-- <RemoveMSI All="True" /> --> — удаление старых версий Office, установленных через Windows MSI. Этот параметр закомментирован, но его нужно включить перед установкой Office 2021, чтобы избежать ошибок;
        • +
        • <Product ID="ProPlus2021Volume" PIDKEY="" > — указание компонентов пакета Office (например, ProPlus2021Volume, ProjectPro2021Volume, VisioPro2021Volume), которые нужно установить. В параметре PIDKEY="" можно указать ваш корпоративный ключ (обычно это MAK ключ);
        • +
        • Используя директиву <ExcludeApp ID="PowerPoint" />, можно установить только выбранные приложения Office (по умолчанию установщик C2R устанавливает все приложения пакета Office).
        • +
        +

        Подробное описание всех параметров:

        +
        +

        https://learn.microsoft.com/en-us/deployoffice/office2019/deploy#create-the-configurationxml

        +
        +

        Создание файла конфигурации под ваши конкретные параметры:

        +
        +

        https://config.office.com/

        +
        +

        После создания XML файла, скачайте дистрибутив для установки Office 2021. Выполните команду:

        +
        Setup.exe /download configuration-Office2021Enterprise.xml
        +
        +
          +
        • В случае неудачи скачивания, запустите VPN, можете воспользоваться нашим сервисом.
        • +
        +
        +

        https://t.me/Dig_for_bot

        +
        +

        После завершения загрузки в каталоге Microsoft Office Deployment Tool появится папка Office (содержит cab и dat файлы для установки Office 2021) размером около 2 Гб.

        +

        Локальная установка

        +

        Для начала установки Office 2021 выполните команду:

        +
        Setup.exe /configure configuration-Office2021Enterprise.xml
        +
        +

        После завершения установки Office 2021 Enterprise или любого другого пакета, вы можете активировать продукт.

        +

        Сетевая установка

        +

        Полученный пакет можно использовать для установки Office 2021 на компьютеры пользователей. Чтобы каждый компьютер не загружал установочные файлы Office 2021 из сети CDN, а использовал локальную копию, укажите путь к каталогу с файлами установки Office в XML файле. Например:

        +
        <Add SourcePath="\\FS1\Distr\Office2021" OfficeClientEdition="64" Channel="PerpetualVL2021">
        +
        +

        Теперь вы можете скопировать каталог Microsoft Office Deployment Tool с XML файлами и дистрибутивом Office 2021 в сетевой каталог или на сервер SCCM.

        \ No newline at end of file diff --git a/backup/240700/blog/05-zabbix-api/index.html b/backup/240700/blog/05-zabbix-api/index.html new file mode 100644 index 0000000..be9c349 --- /dev/null +++ b/backup/240700/blog/05-zabbix-api/index.html @@ -0,0 +1,236 @@ + Групповые политики GPO для Zabbix Agent с использованием магии API | Плата Управления РФ
        +Вернуться в blog
        12 июн. 2024 г.
        5 min read

        Групповые политики GPO для Zabbix Agent с использованием магии API

        Краткое руководство по созданию скрипта для автоматизации добавления новых устройств в доменной сети

        Пролог

        +

        Собирать метрики со всех устройств в сети — это здорово, но не так уж приятно, если у вас уже есть более 10 устройств и вы только решили, что вам нужен мониторинг. А если устройств 100 и больше? Придется много клацать мышкой! Но что мы за админы, если не умеем правильно лениться? Давайте создадим небольшой скрипт, добавим его в GPO, и пусть часть работы за нас выполняет машина.

        +

        Подготовка

        +
          +
        1. +

          На сервере Zabbix создаем новую группу, куда будут попадать новые хосты, например NewHosts. Запишите ID группы — он пригодится позже (в URL строке последние цифры и будут ID).

          +
        2. +
        3. +

          Генерируем токен для подключения к Zabbix API. Для этого перейдите в настройки пользователя, пункт API Tokens.

          +
        4. +
        5. +

          Определяем переменные сервера для скрипта:

          +
        6. +
        +
        # Zabbix server: 
        +$ZBX_SERVER = "192.168.0.2:8080"
        +$ZBX_SERVER_INSTALL = "192.168.0.2"
        +$ZBX_API = "http://$ZBX_SERVER/api_jsonrpc.php"
        +$ZBX_TOKEN = "b1c4f904b2b56a342912dd0c44c890cd35dcac1f69e72cb23c765d8feaf85f0a"
        +$ZBX_TEMPLATE = "Windows by Zabbix agent"
        +$ZBX_HOSTGRP = "NewHosts"
        +
        +
          +
        • $ZBX_SERVER — адрес Zabbix-сервера для URL.
        • +
        • $ZBX_SERVER_INSTALL — адрес Zabbix-сервера для MSI пакета.
        • +
        • $ZBX_API — адрес API Zabbix-сервера.
        • +
        • $ZBX_TOKEN — токен API Zabbix, который мы сгенерировали на этапе подготовки.
        • +
        • $ZBX_TEMPLATE — шаблон мониторинга из Zabbix.
        • +
        • $ZBX_HOSTGRP — группа (NewHosts), которую создали на этапе подготовки.
        • +
        +
          +
        1. Определяем переменные хоста для скрипта:
        2. +
        +
        # Host vars:
        +$HOSTIP = (Get-NetIPAddress -AddressFamily IPv4 | Where-Object {$_.InterfaceAlias -imatch "Ethernet"}).IPAddress.toString()
        +$HOSTDNS = ([System.Net.Dns]::GetHostByName($env:computerName).HostName).tolower()
        +$HOSTNAME = $env:computerName.ToUpper()
        +$AGENT_PORT = "10050"
        +
        +
          +
        • $HOSTIP — IP адрес устройства.
        • +
        • $HOSTDNS — DNS имя устройства.
        • +
        • $HOSTNAME — имя добавляемого устройства.
        • +
        • $AGENT_PORT — порт, на котором слушает Zabbix агент.
        • +
        +

        Я уже прописал скрипт для автоматического заполнения, но вы всегда можете взять отдельные куски кода и запустить их в терминале.

        +
          +
        1. Определяем функцию для регистрации нового хоста:
        2. +
        +
        function RegisterNewHost() {
        +    $REQ_PARAMS = @{
        +            jsonrpc = "2.0"
        +            method = "host.create"
        +            params = @{
        +                host = $HOSTNAME
        +                interfaces = @(
        +                    @{
        +                        type = 1
        +                        main = 1
        +                        useip = 0
        +                        ip = $HOSTIP
        +                        dns = $HOSTDNS
        +                        port = $AGENT_PORT
        +                    }
        +                )
        +                groups = @(
        +                    @{
        +                        groupid = "24"
        +                    }
        +                )
        +                templates = @(
        +                    @{
        +                        templateid = "10081"
        +                    }
        +                )
        +            }
        +            id = 1
        +            auth = $ZBX_TOKEN
        +    } | ConvertTo-Json -Depth 5
        +    $uri = $ZBX_API
        +    $headers = @{
        +        "Content-Type" = "application/json"
        +    }
        +    $method = "Post"
        +    
        +    Invoke-WebRequest -Uri $uri -Headers $headers -Method $method -Body $REQ_PARAMS
        +}
        +
        +
          +
        • groupid — укажите ID группы, созданной в начале.
        • +
        • templateid — укажите шаблон для добавления (по умолчанию 10081 “Windows by Zabbix agent”).
        • +
        • useip — значение, определяющее, что будет идентификатором для хоста: =0 — DNS, =1 — IP адрес.
        • +
        +
          +
        1. Функция установки MSI пакета:
        2. +
        +
        function InstallZbxAgent() {
        +    msiexec /i \\fs1\soft\zabbix_agent2-openssl.msi /qn SERVER=$ZBX_SERVER_INSTALL LISTENPORT=$AGENT_PORT HOSTNAME=$HOSTNAME
        +}
        +
        +
          +
        • \\fs1\soft\ — указываем путь до установочного файла.
        • +
        +

        Основные шаги выполнены. Осталось добавить в скрипт проверку на случай, если Zabbix агент уже установлен, и указать так называемый entry point для скрипта:

        +
        if (!(Test-Path -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Zabbix Agent") -and !(Test-Path -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Zabbix Agent 2")) {
        +    InstallZbxAgent
        +    RegisterNewHost
        +}
        +
        +

        Готовый скрипт

        +
        # Zabbix server: 
        +$ZBX_SERVER = "192.168.0.2:8080"
        +$ZBX_SERVER_INSTALL = "192.168.0.2"
        +$ZBX_API = "http://$ZBX_SERVER/api_jsonrpc.php"
        +$ZBX_TOKEN = "b1c4f904b2b56a342912dd0c44c890cd35dcac1f69e72cb23c765d8feaf85f0a"
        +$ZBX_TEMPLATE = "Windows by Zabbix agent"
        +$ZBX_HOSTGRP = "NewHosts"
        +# Host vars:
        +$HOSTIP = (Get-NetIPAddress -AddressFamily IPv4 | Where-Object {$_.InterfaceAlias -imatch "Ethernet"}).IPAddress.toString()
        +$HOSTDNS = ([System.Net.Dns]::GetHostByName($env:computerName).HostName).tolower()
        +$HOSTNAME = $env:computerName.ToUpper()
        +$AGENT_PORT = "10050"
        +
        +echo "$HOSTIP/$HOSTNAME"
        +
        +function RegisterNewHost() {
        +    $REQ_PARAMS = @{
        +            jsonrpc = "2.0"
        +            method = "host.create"
        +            params = @{
        +                host = $HOSTNAME
        +                interfaces = @(
        +                    @{
        +                        type = 1
        +                        main = 1
        +                        useip = 0
        +                        ip = $HOSTIP
        +                        dns = $HOSTDNS
        +                        port = $AGENT_PORT
        +                    }
        +                )
        +                groups = @(
        +                    @{
        +                        groupid = "24"
        +                    }
        +                )
        +                templates = @(
        +                    @{
        +                        templateid = "10081"
        +                    }
        +                )
        +            }
        +            id = 1
        +            auth = $ZBX_TOKEN
        +    } | ConvertTo-Json -Depth 5
        +    $uri = $ZBX_API
        +    $headers = @{
        +        "Content-Type" = "application/json"
        +    }
        +    $method = "Post"
        +    
        +    Invoke-WebRequest -Uri $uri -Headers $headers -Method $method -Body $REQ_PARAMS
        +    # Для отладки, можно удалить следующую строку.
        +    echo "debug" $REQ_PARAMS
        +}
        +
        +RegisterNewHost
        +
        +function InstallZbxAgent() {
        +	echo "start install msi"
        +    msiexec /i \\fs1\soft\zabbix_agent2-openssl.msi /qn SERVER=$ZBX_SERVER_INSTALL LISTENPORT=$AGENT_PORT HOSTNAME=$HOSTNAME
        +}
        +
        +InstallZbxAgent
        +
        +if (!(Test-Path -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Zabbix Agent") -and !(Test-Path -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Zabbix Agent 2")) {
        +    InstallZbxAgent
        +    RegisterNewHost
        +}
        +
        +

        Добавляем скрипт в политику

        +
        ## Script name:
        +%windir%\System32\WindowsPowerShell\v1.0\powershell.exe
        +## Script parameters:
        +-Noninteractive -ExecutionPolicy Bypass -Noprofile -file "\\DC1\NETLOGON\zbx_agent_install.ps1"
        +
        +

        Настройка завершена. Подключаемся к любому хосту и обновляем политики с помощью команды gpupdate /force.

        +

        Выводим список всех политик с помощью команды gpresult /R /scope:computer.

        +

        Проверяем установку на Windows и добавление устройства на сервере.

        \ No newline at end of file diff --git a/backup/240700/blog/index.html b/backup/240700/blog/index.html new file mode 100644 index 0000000..807a6bd --- /dev/null +++ b/backup/240700/blog/index.html @@ -0,0 +1,43 @@ + Блог | Плата Управления РФ
        Блог
        Filter
        SHOWING 0 OF 5 POSTS
          \ No newline at end of file diff --git a/backup/240700/brand.svg b/backup/240700/brand.svg new file mode 100644 index 0000000..b3f41d6 --- /dev/null +++ b/backup/240700/brand.svg @@ -0,0 +1,530 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/backup/240700/favicon/android-chrome-192x192.png b/backup/240700/favicon/android-chrome-192x192.png new file mode 100644 index 0000000..2d1dbf0 Binary files /dev/null and b/backup/240700/favicon/android-chrome-192x192.png differ diff --git a/backup/240700/favicon/android-chrome-512x512.png b/backup/240700/favicon/android-chrome-512x512.png new file mode 100644 index 0000000..7237081 Binary files /dev/null and b/backup/240700/favicon/android-chrome-512x512.png differ diff --git a/backup/240700/favicon/apple-touch-icon.png b/backup/240700/favicon/apple-touch-icon.png new file mode 100644 index 0000000..5d39bcd Binary files /dev/null and b/backup/240700/favicon/apple-touch-icon.png differ diff --git a/backup/240700/favicon/favicon-16x16.png b/backup/240700/favicon/favicon-16x16.png new file mode 100644 index 0000000..ba31ceb Binary files /dev/null and b/backup/240700/favicon/favicon-16x16.png differ diff --git a/backup/240700/favicon/favicon-32x32.png b/backup/240700/favicon/favicon-32x32.png new file mode 100644 index 0000000..5cee5be Binary files /dev/null and b/backup/240700/favicon/favicon-32x32.png differ diff --git a/backup/240700/favicon/favicon.ico b/backup/240700/favicon/favicon.ico new file mode 100644 index 0000000..432a63d Binary files /dev/null and b/backup/240700/favicon/favicon.ico differ diff --git a/backup/240700/favicon/site.webmanifest b/backup/240700/favicon/site.webmanifest new file mode 100644 index 0000000..45dc8a2 --- /dev/null +++ b/backup/240700/favicon/site.webmanifest @@ -0,0 +1 @@ +{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file diff --git a/backup/240700/fonts/atkinson-bold.woff b/backup/240700/fonts/atkinson-bold.woff new file mode 100644 index 0000000..e7f8977 Binary files /dev/null and b/backup/240700/fonts/atkinson-bold.woff differ diff --git a/backup/240700/fonts/atkinson-regular.woff b/backup/240700/fonts/atkinson-regular.woff new file mode 100644 index 0000000..bbe09c5 Binary files /dev/null and b/backup/240700/fonts/atkinson-regular.woff differ diff --git a/backup/240700/images/logo 2.png b/backup/240700/images/logo 2.png new file mode 100644 index 0000000..7265134 Binary files /dev/null and b/backup/240700/images/logo 2.png differ diff --git a/backup/240700/images/logo.png b/backup/240700/images/logo.png new file mode 100644 index 0000000..770b12a Binary files /dev/null and b/backup/240700/images/logo.png differ diff --git a/backup/240700/img04.jpg b/backup/240700/img04.jpg new file mode 100644 index 0000000..a706034 Binary files /dev/null and b/backup/240700/img04.jpg differ diff --git a/backup/240700/index.html b/backup/240700/index.html new file mode 100644 index 0000000..f1030ed --- /dev/null +++ b/backup/240700/index.html @@ -0,0 +1,98 @@ + Home | Плата Управления РФ

          +Время пришло! +

          +Для новых горизонтов возможностей! +

          +Мы расскажем вам про новое поколение ПЛАТ УПРАВЛЕНИЯ. +

          Мы команда инженеров, програмистов, архитекторов, конструкторов, тестировщиков, которвые собрались для общего дела.

          Проектирование и изготовление печатных плат – это важный этап в создании электронных устройств. Наша компания специализируется на разработке и программировании плат управления, которые могут быть частью различных устройств, от беспилотных летательных аппаратов (БПЛА) до умных домов и систем оповещения.

          Вот несколько ключевых аспектов, которые следует учесть при проектировании и изготовлении печатных плат:

          Определение правил проектирования платы:

          Прежде чем начать размещение компонентов, важно определить правила проектирования печатной платы. Это включает в себя выбор метода изготовления, определение стека платы и установку ограничений для обеспечения производительности и надежности.

          Размещение компонентов:

          Хорошее размещение компонентов обеспечивает решаемость и простоту трассировки. Группировка компонентов по типу помогает предотвратить необходимость долгой трассировки по всей плате.

          Расположение питания и заземления:

          Важно правильно разместить питание и заземление в стеке платы. Это включает в себя учет смешанных сигналов и обеспечение надежной работы.

          Соблюдение механических ограничений:

          Расположение разъемов и соблюдение размеров корпуса также важно для успешного проектирования.

          +Сайт сделан на следующих технологиях +

          +Демонстрируя реактивность и статичность, специального фреймворка + +SolidJS +

          +Для связи +

          +у нас есть email и телеграм бот обратной связи, так же есть каналы в telegram, youtube, github. +

          \ No newline at end of file diff --git a/backup/240700/js/animate.js b/backup/240700/js/animate.js new file mode 100644 index 0000000..8d538fa --- /dev/null +++ b/backup/240700/js/animate.js @@ -0,0 +1,12 @@ +function animate() { + const animateElements = document.querySelectorAll('.animate') + + animateElements.forEach((element, index) => { + setTimeout(() => { + element.classList.add('show') + }, index * 150) + }); +} + +document.addEventListener("DOMContentLoaded", animate) +document.addEventListener("astro:after-swap", animate) \ No newline at end of file diff --git a/backup/240700/js/bg.js b/backup/240700/js/bg.js new file mode 100644 index 0000000..2b9f6ad --- /dev/null +++ b/backup/240700/js/bg.js @@ -0,0 +1,96 @@ + + function generateParticles(n) { + let value = `${getRandom(2560)}px ${getRandom(2560)}px #000`; + for (let i = 2; i <= n; i++) { + value += `, ${getRandom(2560)}px ${getRandom(2560)}px #000`; + } + return value; + } + + function generateStars(n) { + let value = `${getRandom(2560)}px ${getRandom(2560)}px #fff`; + for (let i = 2; i <= n; i++) { + value += `, ${getRandom(2560)}px ${getRandom(2560)}px #fff`; + } + return value; + } + + function getRandom(max) { + return Math.floor(Math.random() * max); + } + + function initBG() { + const particlesSmall = generateParticles(1000); + const particlesMedium = generateParticles(500); + const particlesLarge = generateParticles(250); + const particles1 = document.getElementById('particles1'); + const particles2 = document.getElementById('particles2'); + const particles3 = document.getElementById('particles3'); + + if (particles1) { + particles1.style.cssText = ` + width: 1px; + height: 1px; + border-radius: 50%; + box-shadow: ${particlesSmall}; + animation: animStar 50s linear infinite; + `; + } + + if (particles2) { + particles2.style.cssText = ` + width: 1.5px; + height: 1.5px; + border-radius: 50%; + box-shadow: ${particlesMedium}; + animation: animateParticle 100s linear infinite; + `; + } + + if (particles3) { + particles3.style.cssText = ` + width: 2px; + height: 2px; + border-radius: 50%; + box-shadow: ${particlesLarge}; + animation: animateParticle 150s linear infinite; + `; + } + + const starsSmall = generateStars(1000); + const starsMedium = generateStars(500); + const starsLarge = generateStars(250); + const stars1 = document.getElementById('stars1'); + const stars2 = document.getElementById('stars2'); + const stars3 = document.getElementById('stars3'); + + if (stars1) { + stars1.style.cssText = ` + width: 1px; + height: 1px; + border-radius: 50%; + box-shadow: ${starsSmall}; + `; + } + + if (stars2) { + stars2.style.cssText = ` + width: 1.5px; + height: 1.5px; + border-radius: 50%; + box-shadow: ${starsMedium}; + `; + } + + if (stars3) { + stars3.style.cssText = ` + width: 2px; + height: 2px; + border-radius: 50%; + box-shadow: ${starsLarge}; + `; + } + } + + document.addEventListener('astro:after-swap', initBG); + initBG(); \ No newline at end of file diff --git a/backup/240700/js/scroll.js b/backup/240700/js/scroll.js new file mode 100644 index 0000000..e774103 --- /dev/null +++ b/backup/240700/js/scroll.js @@ -0,0 +1,10 @@ +function onScroll() { + const header = document.getElementById("header") + if (window.scrollY > 0) { + header.classList.add("scrolled") + } else { + header.classList.remove("scrolled") + } +} + +document.addEventListener("scroll", onScroll) diff --git a/backup/240700/js/theme.js b/backup/240700/js/theme.js new file mode 100644 index 0000000..19c9207 --- /dev/null +++ b/backup/240700/js/theme.js @@ -0,0 +1,67 @@ +function changeTheme() { + const element = document.documentElement + const theme = element.classList.contains("dark") ? "light" : "dark" + + const css = document.createElement("style") + + css.appendChild( + document.createTextNode( + `* { + -webkit-transition: none !important; + -moz-transition: none !important; + -o-transition: none !important; + -ms-transition: none !important; + transition: none !important; + }`, + ), + ) + document.head.appendChild(css) + + if (theme === "dark") { + element.classList.add("dark") + } else { + element.classList.remove("dark") + } + + window.getComputedStyle(css).opacity + document.head.removeChild(css) + localStorage.theme = theme +} + +function preloadTheme() { + const theme = (() => { + const userTheme = localStorage.theme + + if (userTheme === "light" || userTheme === "dark") { + return userTheme + } else { + return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light" + } + })() + + const element = document.documentElement + + if (theme === "dark") { + element.classList.add("dark") + } else { + element.classList.remove("dark") + } + + localStorage.theme = theme +} + +window.onload = () => { + function initializeThemeButtons() { + const headerThemeButton = document.getElementById("header-theme-button") + const drawerThemeButton = document.getElementById("drawer-theme-button") + headerThemeButton?.addEventListener("click", changeTheme) + drawerThemeButton?.addEventListener("click", changeTheme) + } + + document.addEventListener("astro:after-swap", initializeThemeButtons) + initializeThemeButtons() +} + +document.addEventListener("astro:after-swap", preloadTheme) + +preloadTheme() diff --git a/backup/240700/legal/privacy/index.html b/backup/240700/legal/privacy/index.html new file mode 100644 index 0000000..9e2d217 --- /dev/null +++ b/backup/240700/legal/privacy/index.html @@ -0,0 +1,58 @@ + Политика конфиденциальности | Плата Управления РФ
          Политика конфиденциальности

          +Last updated: 07 мар. 2024 г.

          Настоящая Политика конфиденциальности определяет, каким образом [Название вашей компании] собирает, использует, хранит и раскрывает информацию, полученную от пользователей (далее “Пользователь”) веб-сайта [URL Вашего веб-сайта] (далее “Сайт”). Настоящая политика конфиденциальности применяется к Сайту и всем продуктам и услугам, предлагаемым [Название вашей компании].

          +

          Личная идентификационная информация

          +

          История о том, как я страдаю, состоит в том, что я избираю элиту. Я считаю, что это масса людей и что из этого следует. История о том, как жизнь человека сходит с ума. Ничто не помогает. Смерть никогда не наступит в конце жизни. Средство, вызывающее боль, и фермент, который выводится из организма, и т.д. Для улучшения состояния преддверия.

          +

          Неличная идентификационная информация

          +

          История о том, как я страдаю, состоит в том, что я избираю элиту. Я считаю, что это масса людей и что из этого следует. История о том, как жизнь человека сходит с ума. Ничто не помогает. Смерть никогда не наступит в конце жизни. Средство, вызывающее боль, и фермент, который выводится из организма, и т.д. Для улучшения состояния преддверия.

          + +

          История о том, как я страдаю, состоит в том, что я избираю элиту. Я считаю, что это масса людей и что из этого следует. История о том, как жизнь человека сходит с ума. Ничто не помогает. Смерть никогда не наступит в конце жизни. Средство, вызывающее боль, и фермент, который выводится из организма, и т.д. Для улучшения состояния преддверия.

          +

          Как мы используем собранную информацию

          +

          История о том, как я страдаю, состоит в том, что я избираю элиту. Я считаю, что это масса людей и что из этого следует. История о том, как жизнь человека сходит с ума. Ничто не помогает. Смерть никогда не наступит в конце жизни. Средство, вызывающее боль, и фермент, который выводится из организма, и т.д. Для улучшения состояния преддверия.

          +

          Как мы защищаем вашу информацию

          +

          История о том, как я страдаю, состоит в том, что я избираю элиту. Я считаю, что это масса людей и что из этого следует. История о том, как жизнь человека сходит с ума. Ничто не помогает. Смерть никогда не наступит в конце жизни. Средство, вызывающее боль, и фермент, который выводится из организма, и т.д. Для улучшения состояния преддверия.

          +

          Предоставление вашей личной информации

          +

          История о том, как я страдаю, состоит в том, что я избираю элиту. Я считаю, что это масса людей и что из этого следует. История о том, как жизнь человека сходит с ума. Ничто не помогает. Смерть никогда не наступит в конце жизни. Средство, вызывающее боль, и фермент, который выводится из организма, и т.д. Для улучшения состояния преддверия.

          +

          Изменения в настоящей политике конфиденциальности

          +

          История о том, как я страдаю, состоит в том, что я избираю элиту. Я считаю, что это масса людей и что из этого следует. История о том, как жизнь человека сходит с ума. Ничто не помогает. Смерть никогда не наступит в конце жизни. Средство, вызывающее боль, и фермент, который выводится из организма, и т.д. Для улучшения состояния преддверия.

          \ No newline at end of file diff --git a/backup/240700/legal/terms/index.html b/backup/240700/legal/terms/index.html new file mode 100644 index 0000000..d538e0f --- /dev/null +++ b/backup/240700/legal/terms/index.html @@ -0,0 +1,58 @@ + Условия использования | Плата Управления РФ
          Условия использования

          +Last updated: 07 мар. 2024 г.

          Пожалуйста, внимательно прочитайте настоящие Условия использования (“Условия”, “Terms of Use”), прежде чем использовать веб-сайт [URL Вашего веб-сайта] (“Сервис”), управляемый [Название вашей компании] (“нами”, “мы” или “наш”).

          +

          Согласие с условиями

          +

          История о том, как я страдаю, состоит в том, что я избираю элиту. Я считаю, что это масса людей и что из этого следует. История о том, как жизнь человека сходит с ума. Ничто не помогает. Смерть никогда не наступит в конце жизни. Средство, вызывающее боль, и фермент, который выводится из организма, и т.д. Для улучшения состояния преддверия.

          +

          Права интеллектуальной собственности

          +

          История о том, как я страдаю, состоит в том, что я избираю элиту. Я считаю, что это масса людей и что из этого следует. История о том, как жизнь человека сходит с ума. Ничто не помогает. Смерть никогда не наступит в конце жизни. Средство, вызывающее боль, и фермент, который выводится из организма, и т.д. Для улучшения состояния преддверия.

          +

          Представления пользователей

          +

          История о том, как я страдаю, состоит в том, что я избираю элиту. Я считаю, что это масса людей и что из этого следует. История о том, как жизнь человека сходит с ума. Ничто не помогает. Смерть никогда не наступит в конце жизни. Средство, вызывающее боль, и фермент, который выводится из организма, и т.д. Для улучшения состояния преддверия.

          +

          Ссылки на другие веб-сайты

          +

          История о том, как я страдаю, состоит в том, что я избираю элиту. Я считаю, что это масса людей и что из этого следует. История о том, как жизнь человека сходит с ума. Ничто не помогает. Смерть никогда не наступит в конце жизни. Средство, вызывающее боль, и фермент, который выводится из организма, и т.д. Для улучшения состояния преддверия.

          +

          Прекращение действия

          +

          История о том, как я страдаю, состоит в том, что я избираю элиту. Я считаю, что это масса людей и что из этого следует. История о том, как жизнь человека сходит с ума. Ничто не помогает. Смерть никогда не наступит в конце жизни. Средство, вызывающее боль, и фермент, который выводится из организма, и т.д. Для улучшения состояния преддверия.

          +

          Регулирующее законодательство

          +

          История о том, как я страдаю, состоит в том, что я избираю элиту. Я считаю, что это масса людей и что из этого следует. История о том, как жизнь человека сходит с ума. Ничто не помогает. Смерть никогда не наступит в конце жизни. Средство, вызывающее боль, и фермент, который выводится из организма, и т.д. Для улучшения состояния преддверия.

          +

          Изменения в настоящих Условиях использования

          +

          История о том, как я страдаю, состоит в том, что я избираю элиту. Я считаю, что это масса людей и что из этого следует. История о том, как жизнь человека сходит с ума. Ничто не помогает. Смерть никогда не наступит в конце жизни. Средство, вызывающее боль, и фермент, который выводится из организма, и т.д. Для улучшения состояния преддверия.

          \ No newline at end of file diff --git a/backup/240700/logo.svg b/backup/240700/logo.svg new file mode 100644 index 0000000..dcf097c --- /dev/null +++ b/backup/240700/logo.svg @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/backup/240700/open-graph.jpg b/backup/240700/open-graph.jpg new file mode 100644 index 0000000..ba48e97 Binary files /dev/null and b/backup/240700/open-graph.jpg differ diff --git a/backup/240700/projects/index.html b/backup/240700/projects/index.html new file mode 100644 index 0000000..6ac011f --- /dev/null +++ b/backup/240700/projects/index.html @@ -0,0 +1,43 @@ + Проекты | Плата Управления РФ
          Проекты
          Filter
          SHOWING 0 OF 1 PROJECTS
            \ No newline at end of file diff --git a/backup/240700/projects/project-1/index.html b/backup/240700/projects/project-1/index.html new file mode 100644 index 0000000..b679567 --- /dev/null +++ b/backup/240700/projects/project-1/index.html @@ -0,0 +1,52 @@ + Project One | Плата Управления РФ
            +Вернуться в projects
            18 мар. 2022 г.
            1 min read

            Project One

            Lorem ipsum dolor sit amet

            Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Vitae ultricies leo integer malesuada nunc vel risus commodo viverra. Adipiscing enim eu turpis egestas pretium. Euismod elementum nisi quis eleifend quam adipiscing. In hac habitasse platea dictumst vestibulum. Sagittis purus sit amet volutpat. Netus et malesuada fames ac turpis egestas. Eget magna fermentum iaculis eu non diam phasellus vestibulum lorem. Varius sit amet mattis vulputate enim. Habitasse platea dictumst quisque sagittis. Integer quis auctor elit sed vulputate mi. Dictumst quisque sagittis purus sit amet.

            \ No newline at end of file diff --git a/backup/240700/robots.txt b/backup/240700/robots.txt new file mode 100644 index 0000000..ca12461 --- /dev/null +++ b/backup/240700/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Allow: / + +Sitemap: https://astro-sphere-demo.vercel.app/sitemap-index.xml \ No newline at end of file diff --git a/backup/240700/rss.xml b/backup/240700/rss.xml new file mode 100644 index 0000000..a3d6213 --- /dev/null +++ b/backup/240700/rss.xml @@ -0,0 +1 @@ +Плата Управления РФВремя пришло! Для новых горизонтов возможностей!https://astro-sphere-demo.vercel.app/Установливаем последний Microsoft Office с официального сайта.https://astro-sphere-demo.vercel.app/projects/04-office-2021/https://astro-sphere-demo.vercel.app/projects/04-office-2021/Инструкция по установке последней версии Microsoft Office с официального сайта. В статье описаны шаги загрузки установочного файла, процесс установки и активации Office, а также советы по устранению возможных проблем.Wed, 12 Jun 2024 21:00:00 GMTХватит терять заявки пользователейhttps://astro-sphere-demo.vercel.app/projects/03-bot-support/https://astro-sphere-demo.vercel.app/projects/03-bot-support/Пора сделать бота для принятия заявок от пользователей всем IT отделом.Tue, 11 Jun 2024 21:00:00 GMTАктивация Windows в организации через KMS serverhttps://astro-sphere-demo.vercel.app/projects/02-kms-service/https://astro-sphere-demo.vercel.app/projects/02-kms-service/Небольшой гайд об активации операционной windows 7/8/10/11 server без установки crack и отключения антивируса.Mon, 10 Jun 2024 21:00:00 GMTДрайвера Amentmen X99-A4 + обновление до Windows 11https://astro-sphere-demo.vercel.app/projects/01-driver-amentmen-x99-a4-update-w11/https://astro-sphere-demo.vercel.app/projects/01-driver-amentmen-x99-a4-update-w11/Техподдержка через WhatsApp предоставила драйверы для аудио и сетевой карты, которые были автоматически обновлены с Microsoft, а драйвер для чипсета загружен с официального сайта Intel.Wed, 22 May 2024 21:00:00 GMTProject Onehttps://astro-sphere-demo.vercel.app/projects/project-1/https://astro-sphere-demo.vercel.app/projects/project-1/Lorem ipsum dolor sit ametThu, 17 Mar 2022 21:00:00 GMT \ No newline at end of file diff --git a/backup/240700/search/index.html b/backup/240700/search/index.html new file mode 100644 index 0000000..dc9e62b --- /dev/null +++ b/backup/240700/search/index.html @@ -0,0 +1,43 @@ + Поиск | Плата Управления РФ
            Поиск
            \ No newline at end of file diff --git a/backup/240700/sitemap-0.xml b/backup/240700/sitemap-0.xml new file mode 100644 index 0000000..0286e9a --- /dev/null +++ b/backup/240700/sitemap-0.xml @@ -0,0 +1 @@ +https://astro-sphere-demo.vercel.app/https://astro-sphere-demo.vercel.app/blog/https://astro-sphere-demo.vercel.app/blog/01-driver-amentmen-x99-a4-update-w11/https://astro-sphere-demo.vercel.app/blog/02-kms-service/https://astro-sphere-demo.vercel.app/blog/03-bot-support/https://astro-sphere-demo.vercel.app/blog/04-office-2021/https://astro-sphere-demo.vercel.app/legal/privacy/https://astro-sphere-demo.vercel.app/legal/terms/https://astro-sphere-demo.vercel.app/projects/https://astro-sphere-demo.vercel.app/projects/project-1/https://astro-sphere-demo.vercel.app/search/https://astro-sphere-demo.vercel.app/work/ \ No newline at end of file diff --git a/backup/240700/sitemap-index.xml b/backup/240700/sitemap-index.xml new file mode 100644 index 0000000..61a3e7d --- /dev/null +++ b/backup/240700/sitemap-index.xml @@ -0,0 +1 @@ +https://astro-sphere-demo.vercel.app/sitemap-0.xml \ No newline at end of file diff --git a/backup/240700/social.svg b/backup/240700/social.svg new file mode 100644 index 0000000..f48a89a --- /dev/null +++ b/backup/240700/social.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/backup/240700/stack.svg b/backup/240700/stack.svg new file mode 100644 index 0000000..25864ce --- /dev/null +++ b/backup/240700/stack.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/backup/240700/ui.svg b/backup/240700/ui.svg new file mode 100644 index 0000000..b52389f --- /dev/null +++ b/backup/240700/ui.svg @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/backup/240700/work/index.html b/backup/240700/work/index.html new file mode 100644 index 0000000..f50c647 --- /dev/null +++ b/backup/240700/work/index.html @@ -0,0 +1,58 @@ + Работа | Плата Управления РФ
            Работа
            • янв. 2023 - нояб. 2025
              Мониторинг ЖКХ
              комплекс устройств опроса

              В городе Иркутске внедрили систему мониторинга ЖКХ. Датчики тепла и воды передают данные на гркпповое устройство, далее на центральный сервер. Алгоритмы анализируют потребление и предупреждают о возможных утечках.

              +
                +
              • Беспроводной интерфейс позводяет размещать датчики в любом месте.
              • +
              • Неограниченное колличество датчиков.
              • +
              • Оповещение с выделенного сервера, позволяет получать свежую информацию об всех неисправностях.
              • +
            • янв. 2020 - окт. 2023
              Система вызова персонала
              Комплекс пультового управления

              В частной клинике внедрили систему автоматического вызова персонала. Если датчики обнаруживают падение пациента или аномалию, они отправляют сигнал на пульт оператора. Это спасает жизни! +Так же дополнительное размещение обородувани во все кабинеты позволили оповещать персонал об необходимой помощи всех категорий врачей и охраны.

              +
                +
              • Беспроводной интерфейс позволил маштабировать сеть на нестандартную форму здания без дополнительной покладки линий
              • +
              • Выделенный сервер позволяет собирать все журналы вызово.
              • +
            • янв. 2020 - окт. 2023
              Телеграм коммандер
              Программный Комплекс управления

              Инженеры создали бота для управления домашними устройствами через Telegram. Он принимает команды от пользователя и включает свет, регулирует температуру и даже готовит кофе. Удобно и современно!

              +
                +
              • Универсальное средство управления экономит ваше время.
              • +
              • Выделенный сервер позволяет контролировать внештатную ситуацию.
              • +
              • Сцанарное управление дает возможность выстравивать алгоритмы последовательноти ваших действий.
              • +
            \ No newline at end of file diff --git a/src/components/BaseHead.astro b/src/components/BaseHead.astro index ae92d25..ed0ce38 100644 --- a/src/components/BaseHead.astro +++ b/src/components/BaseHead.astro @@ -55,6 +55,23 @@ const { title, description, image = "/img04.jpg" } = Astro.props + + + + +